php xpath в XML

Как я могу достичь этого:

<root> <gallery name="First"> <picture active="1" detail="not shown"/> <picture active="1" detail="not shown"/> <picture active="0" detail="not shown"/> </gallery> <gallery name="Second"> <picture active="0" detail="not shown"/> <picture active="1" detail="SHOW THIS ONE"/> <picture active="1" detail="AND SHOW THIS ONE" /> </gallery> </root> 

Я пытаюсь:

 $myArray = $objXML->xpath('gallery[@name="Second"]/picture[@active=1]'); 

Как я могу изменить его, чтобы получить желаемый результат? Спасибо, Энди

Ваш XPath ошибочен. Либо используйте

 /root/gallery[@name="Second"]/picture[@active=1] 

для сопоставления этой совокупности узлов только с корневым узлом или

 //gallery[@name="Second"]/picture[@active=1] 

для сопоставления этой совокупности узлов в любом месте документа (медленнее)

Полные рабочие примеры:

 $dom = new DOMDocument; $dom->load('NewFile.xml'); // containing your XML $xp = new DOMXPath($dom); $pictures = $xp->query('/root/gallery[@name="Second"]/picture[@active=1]'); foreach ($pictures as $picture) { echo $dom->saveXml($picture), PHP_EOL; } 

дает

 <picture active="1" detail="SHOW THIS ONE"/> <picture active="1" detail="AND SHOW THIS ONE"/> 

а также

 $sxe = new SimpleXMLElement('NewFile.xml', NULL, TRUE); $pictures = $sxe->xpath('/root/gallery[@name="Second"]/picture[@active=1]'); foreach ($pictures as $picture) { echo $picture['detail'], PHP_EOL; } 

дает

 SHOW THIS ONE AND SHOW THIS ONE