考虑以下test.xml
<root>
<parent>
<ID>1</ID>
<child1>Value1</child1>
<child2>value11</child2>
<child3>
<grandchild>
<greatgrandchild>value1111</greatgrandchild>
</grandchild>
</child3>
</parent>
<parent>
<ID>2</ID>
<child1>value2</child1>
<child3>
<grandchild>
<greatgrandchild>value2222</greatgrandchild>
</grandchild>
</child3>
</parent>
<parent>
<ID>3</ID>
<child1>value3</child1>
<child2>value33</child2>
<child3>
<grandchild>
<greatgrandchild>value3333</greatgrandchild>
</grandchild>
</child3>
</parent>
<parent>
<ID>4</ID>
<child1>value4</child1>
<child2>value44</child2>
<child3>
<grandchild>
<greatgrandchild>value4444</greatgrandchild>
</grandchild>
</child3>
</parent>
</root>
当我对xpath'/ root / parent'使用以下内容时,我可以轻松获取ID,child1和child2的值。
但是我没有得到孙子的伟大孩子的价值。
我可以做些什么来获得这些价值。
$query = '/root/parent'
$xQuery = $xml->xpath($query);
foreach($xQuery as $results){
echo $results->ID;
echo $results->child1;
echo $results->child2;
echo $results->greatgrandchild;
}
我想根据greatgrandchild的值来过滤结果。我可以成功过滤ID和child1和child2的结果。我希望根据伟大的孩子的价值,成为一个父母及其所有子孙后代和伟大的孩子。
使用xpath可以吗?
我编辑了问题的措辞并使用了正确的test.xml,因为我第一次遇到错误。
答案 0 :(得分:1)
您的代码中存在2个问题,
grandchild
节点含糊不清且格式错误。 grandchild2
的结束标记为grandchild
,这是错误的。
This is wrong------------+
|
v
<grandchild2>value3333</grandchild>
$results->grandchild
不存在,而是使用$results->child3->grandchild
。此处Xpath将parent
节点下的所有root
个节点返回为SimpleXMLElement
查找parent
和child1=value3
使用此查询的所有grandchild1=value333
元素。
/root/parent[child1 = "value3" and child3/grandchild = "value333"]