2012-05-09 12 views
0

は、child1の、私は、XPathのために、以下の「/ルート/親」を使用すると、私は簡単にIDの値を取得することができ、次のtest.xmlPHPとXPath、フィルタリング結果

<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> 

を考えてみましょうと子2。

しかし、私は孫の偉大な指導者の価値を得ていません。

これらの値を取得するにはどうすればよいですか。

$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の結果を正常にフィルタリングできます。私はgreatgrandchildの価値に基づいて、親とその子どもと孫と偉大な子供のすべてを得たいと思っています。

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

質問の文章を編集し、適切なtest.xmlを使用しました。最初にエラーがあったためです。

+0

回答を受け入れてください。 –

答えて

1

あなたのコード内の2つの問題、

  • grandchildノードがあいまいと不正な形式であるがあります。 grandchild2の終了タグはgrandchildですが間違っています。

    This is wrong------------+ 
             | 
             v 
    <grandchild2>value3333</grandchild> 
    
  • $results->grandchildはむしろ$results->child3->grandchildを使用し、存在しません。ここではXPathはそのchild1=value3grandchild1=value333このクエリを使用するすべてのparent要素を見つけるにはSimpleXMLElement

ようrootノードの下にあるすべてのparentのノードを返します。

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

ねえ、ありがとう。私はこのXMLを、私が達成しようとしていることを理解しやすくするために作りました。これは私が使用しているのと同じxmlファイルではありません。私はxml形式のエラーを編集しました。私はまだ孫の価値を得ることができません。 – Marc

+0

私の答えの2番目の箇条書きを参照してください。それはあなたが必要なものです。 –

+0

OK完璧!しかしもう1つの質問。どのように私はgreatgrandchildの価値をテストし、同じforループを使用することができます。たとえば、次のようなxp​​athは機能しません。/root/parent [greatgrandchild = value333]。私はこれがうまくいかず、/ root/parent/child3/grandchild [greatgrandchild = value333]の行に何かを追加する必要があることを知っています。しかし、私は子2の値をテストしたい。それがSQLの場合、ステートメントはrootからSelect parentになります。ここで、greatgrandchild = value333とchild1 = value3です。 2つのxpathフィルタをマージすることは可能ですか? – Marc

関連する問題