如何在for循环内的当前SimpleXMLElement对象上运行Xpath查询。例如
<?php
$xml = simplexml_load_string('<?xml version="1.0" encoding="ISO-8859-1"?>
<bookstore>
<book>
<title lang="eng">Harry Potter</title>
<price>29.99</price>
</book>
<book>
<title lang="eng">Learning XML</title>
<price>39.95</price>
</book>
</bookstore> ');
foreach ($xml as $value) {
$result = $value->xpath('//title');
var_dump($result);
break;
}
?>
array
0 =>
object(SimpleXMLElement)[189]
public '@attributes' =>
array
'lang' => string 'eng' (length=3)
string 'Harry Potter' (length=12)
1 =>
object(SimpleXMLElement)[188]
public '@attributes' =>
array
'lang' => string 'eng' (length=3)
string 'Learning XML' (length=12)
这会输出两个书元素的结果,而我的意图是只显示第一个。我正在尝试查询在for循环中的$ value对象上运行 ,因为我可能想在每本书上运行不同的查询(所以它必须在循环中!)不是每一个这本书目前正在做什么。
答案 0 :(得分:4)
您可以使用.
来表示当前节点。因此./Foo
选择名为Foo
的直接子项,.//Foo
选择名为Foo
的所有后代。
如果没有点,则假定//
引用文档的根,并在整个文档中选择名为Foo
的所有内容。
答案 1 :(得分:0)
//从当前节点中选择与选择匹配的文档中的节点,无论它们在何处。
当我运行查询以从根目录中选择所有节点时,我已经在所需的节点(例如$ value)中,因此从所有节点获取信息。
由于我已经在必需的节点元素删除中,//获得预期的结果,在当前节点上运行查询。