2

forループ内の現在のSimpleXMLElementオブジェクトに対してXpathクエリを実行するにはどうすればよいですか。例えば

<?php
$xml = simplexml_load_string('<?xml version="1.0" encoding="ISO-8859-1"?>

<bookstore>

<book>
  <title lang="eng">Harry Potter</title>
  <price>29.99</price>
</book>

<book>
  <title lang="eng">Learning XML</title>
  <price>39.95</price>
</book>

</bookstore> ');


foreach ($xml as $value) {
    $result = $value->xpath('//title');
    var_dump($result);
    break;
}
?>

array
  0 => 
    object(SimpleXMLElement)[189]
      public '@attributes' => 
        array
          'lang' => string 'eng' (length=3)
      string 'Harry Potter' (length=12)
  1 => 
    object(SimpleXMLElement)[188]
      public '@attributes' => 
        array
          'lang' => string 'eng' (length=3)
      string 'Learning XML' (length=12)

これは両方の本の要素の結果を出力しますが、最初の要素のみを表示することが私の意図です。各本で異なるクエリを実行したい場合があるため、forループの$ valueオブジェクトでのみクエリを実行しようとしています(したがって、ループ内にある必要があります)。現在のすべての本ではありません。やっています。

4

2 に答える 2

4

.現在のノードを表すために使用できます。したがって、./Fooという名前の直接の子が選択されFoo、という.//Foo名前のすべての子孫が選択されFooます。

ドットがない場合、//はドキュメントのルートを参照すると見なされ、ドキュメントFoo全体で呼び出されるすべてが選択されます。

于 2012-12-11T23:37:34.020 に答える
0

// ドキュメント内のノードがどこにあっても、現在のノードから選択に一致するノードを選択します。

ルートからすべてのノードを選択するクエリを実行したとき、私はすでに必要なノード ($value など) にいたため、すべてのノードから情報を取得していました。

私はすでに必要なノード要素の削除を行っているので、// は期待される結果を取得し、現在のノードでクエリを実行します。

于 2012-12-07T12:14:36.860 に答える