Код (Text): $str=<<<XML <?xml version='1.0' standalone='yes'?> <root> <module_file> <folder name="template"><file>news.tpl</file></folder> <file>news.class.php</file> </module_file> </root> XML; function parser($xml){ foreach( $xml->module_file as $m_f){ if ($m_f->type=="folder") { echo $m_f->folder; parser($m_f); }else{ echo $m_f->file; }; } $xml = new SimpleXMLElement($str); parser($xml); Что-то я запутался, каким образом пройтись по вложеным папкам? Я так понимаю рекурсией?
PetrOFF юзай xpath - круче, понятней, удобней, имхо для твоего задания рекурсия не нужна пример: PHP: <?php $str=<<<XML <?xml version='1.0' standalone='yes'?> <root> <module_file> <folder name="template"><file>news1.tpl</file></folder> <folder name="template"><file>news2.tpl</file></folder> <folder name="template"><file>news3.tpl</file></folder> <folder name="template"><file>news4.tpl</file></folder> <file>news.class.php</file> </module_file> </root> XML; $xml = simplexml_load_string($str); $result = $xml->xpath('//folder'); var_dump($result);
Код (Text): $xml = simplexml_load_string($str); $result = $xml->xpath('//module_file'); foreach($xml->xpath('//module_file') as $d_f){ echo $d_f->file; echo $d_f->folder['name']; } Однако выводит только тэги первого уровня.... Каким способом пробежатся по $result ??
так, у меня такое подозрение, что это ... Код (Text): $str=<<<XML <?xml version='1.0' standalone='yes'?> <root> <module_file> <folder name="template"><file>news.tpl</file></folder> <file>news.class.php</file> </module_file> </root> XML; ... далеко не полный пример... выложи на рапиаде или где те удобней полный пример xml и напиши детальней че ты хочешь с него иметь в результате по поводу тегов... оно будет отображать то шо первое стоит если ты хочешь пробежать по ним то тебе нужно воспользоваться функцией/методу attributes() а точнее мануалом ну если ты дашь full xml and ask me questions i will do it to you
PHP: # <?php # $str=<<<XML # <?xml version='1.0' standalone='yes'?> # <root> # <module_file> # <folder name="template"><file>news1.tpl</file></folder> # <folder name="template"><file>news2.tpl</file></folder> # <folder name="template"><file>news3.tpl</file></folder> //Здесь может быть любой уровень вложености # <folder name="template"><folfer name="template1"><file>news4.tpl</file></folder></folder> # # # <file>news.class.php</file> # # # </module_file> # # </root> # XML; # # $xml = simplexml_load_string($str); # $result = $xml->xpath('//folder'); # # var_dump($result); Интересует каким образом можно пройтись по всей ветки <module_file> если она может содержать любое количество вложености?
хм, помое-му это бредово..., скажи зачем такая задача нужна? а лучше скажи где ты такой xml взял то.... вообще-то рекурсивно такую фишку можно проделать но по-моему это не правильно так делать я представляю чет типа этого - вложенность... <folder id="1" parentid="0"><file>Родитель 1</file></folder> <folder id="2" parentid="1"><file>Дите 1 родителя 1</file></folder> <folder id="3" parentid="1"><file>Дите 2 родителя 1</file></folder> такое устраивает?
В принципе я так и сделал как ты указал. Мне надо указать путь до файла и я думал что удобней было бы сделать вложением папка\папка\....\файл. Но все равно спасибо за подсказки
Блин... все это здоров и весело.... но вот что делать - если XML имеет такую структуру HTML: - <Владелец> <Ид>50af76d0-82f0-11db-9c4c-505054503030</Ид> <Наименование>ЗАО "Спецстрой-Петербург"</Наименование> <ОфициальноеНаименование>Закрытое акционерное общество "Спецстрой-Петербург"</ОфициальноеНаименование> - <ЮридическийАдрес> <Представление>195196, Санкт-Петербург г, Рижская ул, дом № 3, оф.206</Представление> - <АдресноеПоле> <Тип>Почтовый индекс</Тип> <Значение>195196</Значение> </АдресноеПоле> то есть теги - на кирилице