【问题标题】:php xpath on XMLXML上的php xpath
【发布时间】:2010-11-19 12:59:58
【问题描述】:

我怎样才能做到这一点:

<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]');

如何更改它以获得所需的输出? 谢谢,安迪

【问题讨论】:

  • 为什么从上一个问题的DOM变成了现在的SimpleXml?
  • 我使用 DOM 添加和删除节点,因为我读到它比使用 SimpleXML 容易得多,我使用 SimpleXML 来显示和编辑 XML。

标签: php xml xpath


【解决方案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

【讨论】:

  • 它们对我不起作用,您可以在 xpath 中查询多个内容吗?
  • @andy 查看更新。 “不适合我”不是正确的错误描述。请澄清您的问题。
  • 对不起,我周五没时间好好检查一下。现在我又看了一眼,意识到我已经更改了我的 XML 文件,这就是它无法正常工作的原因。 xpath 的东西一直都很好!谢谢你的帮助,安迪
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-09-01
  • 2018-06-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多