PHP和Xpath,根据伟大的孩子过滤结果

时间:2012-05-09 16:18:21

标签: php xml xpath

考虑以下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,因为我第一次遇到错误。

1 个答案:

答案 0 :(得分:1)

您的代码中存在2个问题,

  • grandchild节点含糊不清且格式错误。 grandchild2的结束标记为grandchild,这是错误的。

    This is wrong------------+
                             |  
                             v
    <grandchild2>value3333</grandchild>
    
  • $results->grandchild不存在,而是使用$results->child3->grandchild。此处Xpath将parent节点下的所有root个节点返回为SimpleXMLElement

查找parentchild1=value3使用此查询的所有grandchild1=value333元素。

/root/parent[child1 = "value3" and child3/grandchild = "value333"]