XML 上的 php xpath

标签 php xml xpath

我怎样才能做到这一点:

<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/

相关文章:

PHP 表单单选按钮

php - CakePHP 3 : How to properly check if a user is logged in

python - 我无法在 PyCharm 中导入 xml.dom.minidom。我可以尝试什么?

selenium - 使用 selenium 提取网站的面包屑

php - 使用 php 倒转每个单词

php - 如何阻止来自某些国家/地区的访问者访问我的网站 (xyz.com/thisFile.php) 上的文件?

php - 检测设备是iOS还是Android,然后重定向

java - 如何从 xml 字符串内容构建 HierarchicalConfiguration 对象?

sql-server - 在 SQL Server 中使用 XQuery 返回重复项

java - 在循环中使用 XPath 表达式