我怎样才能做到这一点:
<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
关于XML 上的 php xpath,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4225227/