Intereting Posts
Как вычислить crc16 в php Почему, если я помещаю «-» тире в правило в моем htaccess, не работает? Доступ к константам класса из экземпляра, хранящегося в другом классе Почему PDO_MySQL не возвращает целое число? случайная ошибка symfony: ContextErrorException: Warning: simplexml_load_file (): предупреждение ввода-вывода: не удалось загрузить внешний объект Как я могу написать в PHP функцию, которая модифицирует массив? Потеря переменной сеанса между одной страницей с помощью библиотеки сеансов codeigniter jquery, Ajax или PHP: запустить скрипт в определенное время или выполнить действие в фоновом режиме php crypt () длина соляной лунки обратной совместимости PayPal IPN симулятор получить ошибку? Как инициализировать статические переменные Где я должен разместить mysql_real_escape_string? php дата меньше, чем другая дата Удалить index.php в CodeIgniter_2.1.4 Ошибка 324 (net :: ERR_EMPTY_RESPONSE) при отправке с PHP-страницы или на страницу PHP

Разбор XML с помощью Xpath в PHP

Рассмотрим следующий код:

$dom = new DOMDocument(); $dom->loadXML($file); $xmlPath = new DOMXPath($dom); $arrNodes = $xmlPath->query('*/item'); foreach($arrNodes as $item){ //missing code } 

$ File – это xml, и каждый элемент имеет заголовок и описание. Как я могу отобразить их (название и описание)?

 $file = "<item> <title>test_title</title> <desc>test</desc> </item>"; 

Если ваш элемент выглядит так:

 <item> <title>foo</title> <description>frob</description> </item> 

Вы можете использовать getElementsByTagName() и nodeValue :

 foreach($arrNodes as $item){ print $item->getElementsByTagName('title')->item(0)->nodeValue; } 

Атрибуты title и description ? E. g. элемент выглядит следующим образом:

 <item title="foo" description="frob" /> 

Если это так, вы можете просто использовать getAttribute() :

 ... foreach($arrNodes as $item){ print $item->getAttribute('title'); } 

Я предлагаю использовать simplexml php, с этим вы все равно получаете функциональность xpath , но с более простым подходом, например, вы бы получили доступ к следующим атрибутам:

 $name = $item['name']; 

Вот пример:

XMLFile.xml:

 <?xml version="1.0" encoding="UTF-8"?> <xml> <items> <item title="Hello World" description="Hellowing the world.." /> <item title="Hello People" description="greeting people.." /> </items> </xml> 

do.php:

 <?php $xml_str = file_get_contents('xmlfile.xml'); $xml = new SimpleXMLElement($xml_str); $items = $xml->xpath('*/item'); foreach($items as $item) { echo $item['title'], ': ', $item['description'], "\n"; } 

Правильное выражение XPath должно быть:

 /*/item/title | /*/item/desc 

Или

 /*/item/*[self::title or self::desc] 

Это оценивается узлом с элементом title и desc в порядке документа