0

私は PHP と XML にかなり慣れていないので、これで私を助けてくれることを願っています。フォーラムを検索しても、特定の問題に対する回答を見つけることができませんでした。

次のような simplexml 配列を含む PHP ページがあります。

    SimpleXMLElement Object 
    ( 
       [textID] => Array 
                ( 
                   [0] => SimpleXMLElement Object 
                       ( 
                          [textID] => 1 
                          [content] => Text1 
                       ) 
                   [1] => SimpleXMLElement Object 
                       ( 
                          [textID] => 2 
                          [content] => Text2
                       ) 
                   [2] => SimpleXMLElement Object 
                       ( 
                          [textID] => 3 
                          [content] => Text3 
                       ) 
                )
      )

今、整数である ID を参照して、この配列から特定の値をエコーアウトしようとしています。これを機能させる唯一の方法は次のとおりですが、これは実際の ID ではなく、配列内の順序で行われます。

    <?php echo $objTexts->textID[1]->content; ?>

ここで何が欠けているのか誰か教えてもらえますか?

ありがとう、ティム

4

1 に答える 1

1

SimpleXML には、textIDどのノードがどれであるかを識別する方法がありません。これは、XML の別の要素にすぎません。

サンプル出力に基づいて、XML は少し混乱しています。それぞれが異なる意味を持つtextID単一の子を持つと呼ばれる複数の要素があるためです。textIDそれにもかかわらず、やりたいことは、すべての外側の要素をループして内側の要素textIDの値をテストすることで実現できます。textID

foreach ( $objTexts->textID as $item )
{
     if ( $item->textID == '2' )
     {
          ...
     }
}

または、XPath を使用することもできます。XPath は XML 用の非常に単純なクエリ言語であり、->xpath()メソッドの形式で SimpleXML 内でサポートされています。textIDあなたの場合、特定の値を持つ子を含むノードを見つけたいtextIDので、コードは次のようになります。

 // ->xpath always returns a plain PHP array - not a SimpleXML object
 $xpath_results = $objTexts->xpath('//textID[textID=2]');

 // If you're certain you only want the first result:
 echo $xpath_results[0]->content;

 // If you might want multiple matches
 foreach ( $xpath_results as $item )
 {
     ...
 }
于 2013-08-04T22:05:09.100 に答える