php xml XPath foreach 返回所有节点而不是迭代

我有一个这样的 XML 文件


<Articles>

 <Article>

  <ArticleTitle> 

   First Book

 </ArticleTitle>

</Article>

 <Article>

  <ArticleTitle> 

   Second Book

 </ArticleTitle>

</Article>

并使用这种类型的 php 脚本以迭代方式检索 ArticleTitle 的内容


foreach ($xml->Article as $Article){

$title = $Article->xpath('//ArticleTitle');

echo $title[0];

}

但这显示


First Book

First Book

代替


First Book

Second Book

我假设在foreach ($xml->Article as $Article)启动时它将获取每个 Article 节点,然后我可以访问该节点的内容,但这不是正在发生的事情。我究竟做错了什么?


UYOU
浏览 101回答 2
2回答

慕婉清6462132

您的问题是您使用的 xpath 是绝对路径(以 开头/),因此您从子节点调用它这一事实没有任何效果。您应该使用相对路径,在这种情况下,要么简单地ArticleTitle就足够了,要么.//ArticleTitle允许Article和之间的其他节点ArticleTitle。例如:foreach ($xml->Article as $Article){    $title = $Article->xpath('ArticleTitle');    echo $title[0];}foreach ($xml->Article as $Article){    $title = $Article->xpath('.//ArticleTitle');    echo $title[0];}两种情况下的输出都是:First BookSecond Book

浮云间

这也适用于您原来的 XPath 表达式:$xml = <<<'XML'<Articles><Article><ArticleTitle>First Book</ArticleTitle></Article><Article><ArticleTitle>Second Book</ArticleTitle></Article></Articles>XML;$document = new DOMDocument();$document->loadXML($xml);$xpath = new DOMXpath($document);$elements = $xpath->query('//ArticleTitle');foreach($elements as $element)echo ($element->nodeValue), "\n";?>输出 :First BookSecond Book
打开App,查看更多内容
随时随地看视频慕课网APP