0

考虑以下 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;
}

我想根据曾孙的值过滤结果。我可以成功过滤ID和child1和child2的结果。根据曾孙的价值,我想成为父母及其所有的子女、孙子女和曾孙子女。

这可能使用xpath吗?

我已经编辑了问题的措辞并使用了正确的 test.xml,因为我第一次遇到了错误。

4

1 回答 1

1

您的代码中有两个问题,

  • grandchild节点不明确且格式错误。的结束标签grandchild2grandchild错误的。

    This is wrong------------+
                             |  
                             v
    <grandchild2>value3333</grandchild>
    
  • $results->grandchild不存在,而是使用$results->child3->grandchild. 这里 Xpath 返回parentnode 下的所有root节点为SimpleXMLElement

查找所有parent元素child1=value3grandchild1=value333使用此查询。

/root/parent[child1 = "value3" and child3/grandchild = "value333"]
于 2012-05-09T16:37:03.550 回答