Analisi di un XML con Xpath in PHP

Considera il seguente codice:

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

Il file $ è un xml e each elemento ha un titolo e una descrizione. Come posso visualizzarli (titolo e descrizione)?

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

Se il tuo articolo appare così:

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

È ansible utilizzare getElementsByTagName() e nodeValue :

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

Gli attributi del title e della description ? Per esempio. un object assomiglia a questo:

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

Se è così, puoi semplicemente usare getAttribute() :

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

Suggerisco di usare il simplexml di php, con questo, si ottiene comunque la funzionalità xpath , ma con un approccio più semplice, ad esempio si accederebbe ad attributi come questo:

 $name = $item['name']; 

Ecco un esempio:

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"; } 

L'espressione XPath corretta dovrebbe essere:

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

O

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

Questo è valutato su un nodo impostato con title e elemento desc nell'ordine del documento