SimpleXML вложеный элемент
<?xml version="1.0" encoding="utf-8" ?>
- <tv generator-info-name="tele.perm.ru"> - <channel id="1"> <display-name lang="ru">24 Док</display-name> </channel> - <channel id="2"> <display-name lang="ru">24 Техно</display-name> </channel> - <channel id="92"> <display-name lang="ru">2x2</display-name> </channel> </tv> $xml=simplexml_load_file("http://192.168.9.5/amin/tvguide.xml"); foreach($xml->children()->channel as $x) { echo $x[id]." <br>"; }; а как добраться до вложенного? уже мозг порвал :blink: |
Решил проблему оказывается уроды предоставляющие данные не знают стандарта ((((
foreach($xml->channel as $x) { //echo $x[id]; echo( $x->display."<br>"); }; пред использованием убрать тире в display-name |
где в стандарте сказано, что нельзя в имени дефисы использовать?
http://www.w3.org/TR/2008/REC-xml-20081126/#NT-Name |
ну я сделал такой вывод после того как убрал дефис и всё стало работать. .....ну тогда SimpleXML тупит и не воспринимает дефисы
|
ой какая жуть......файлик 5 мб, разбор формата в "лоб" через найти вырезать дало прирост производительности в два раза.
|
ну он же наверное создает сначала дерево, т.е. парсит весь файл. Можешь другие парсеры попробовать
|
Товарищи, да тут же SimpleXML даже не к чему.
<?php $str = '<?xml version="1.0" encoding="utf-8" ?> <tv generator-info-name="tele.perm.ru"> <channel id="1"> <display-name lang="ru">24 Док</display-name> </channel> <channel id="2"> <display-name lang="ru">24 Техно</display-name> </channel> <channel id="92"> <display-name lang="ru">2x2</display-name> </channel> </tv>'; $document=new DOMDocument(); $document->loadXML($str); $xpath = new DOMXpath($document); foreach ($xpath->query("/tv/channel") as $channel_node){ $channel_id = intval($channel_node->getAttribute('id')); $channel_name_node = $xpath->query("display-name", $channel_node)->item(0); $channel_name = $channel_name_node?$channel_name_node->textContent:""; /* что-нибудь полезное */ echo "<br />{$channel_id}: {$channel_name}"; }; UPD: …а если нужно вывести только названия каналов, то решение вообще сокращается до неприлично короткого: <?php $str = '<?xml version="1.0" encoding="utf-8" ?> <tv generator-info-name="tele.perm.ru"> <channel id="1"> <display-name lang="ru">24 Док</display-name> </channel> <channel id="2"> <display-name lang="ru">24 Техно</display-name> </channel> <channel id="92"> <display-name lang="ru">2x2</display-name> </channel> </tv>'; $document=new DOMDocument(); $document->loadXML($str); $xpath = new DOMXpath($document); foreach ($xpath->query("/tv/channel/display-name") as $channel_name_node){ $channel_name = $channel_name_node->textContent; echo "<br />{$channel_name}"; }; |
Цитата:
|
x-yuri,
Для меня это просто из той же категории, что подключать jQuery, чтобы получить элемент по его id. |
не работал дум....от того и выбрал симпл. спасибо за инфу!!!
|
Часовой пояс GMT +3, время: 19:22. |