Рассмотрим следующий код:
$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
в порядке документа