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 の結果を正常にフィルター処理できます。私は、greatgrandchild の値に基づいて、親とそのすべての子、孫、greatgrandchild を取得したいと考えています。

これは xpath を使用して可能ですか?

初めてエラーが発生したため、質問の文言を編集し、適切な test.xml を使用しました。

4

1 に答える 1

1

コードには 2 つの問題があります。

  • grandchildノードがあいまいで、形式が正しくありません。grandchild2isの閉じタグgrandchildが間違っています。

    This is wrong------------+
                             |  
                             v
    <grandchild2>value3333</grandchild>
    
  • $results->grandchildは存在しません。むしろ使用して$results->child3->grandchildください。ここで、Xpath は node の下のすべてのノードを次のように返しますparentrootSimpleXMLElement

すべてのparent要素を検索するには、このクエリchild1=value3を使用します。grandchild1=value333

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