2012-02-08 12 views
0

このコード場合:PHPのXPathの構文

$s = 'BrowseNodes/BrowseNode'; 
$temp_bnid=$item->xpath($s); 
echo '<pre> 
Root Search: 
'; 
print_r($temp_bnid); 
echo '</pre>'; 
die('Halted for testing'); 

この出力を与える:

Root Search: 
Array 
(
    [0] => SimpleXMLElement Object 
     (
      [BrowseNodeId] => 2522032011 
      [Name] => Balls 
      [Ancestors] => SimpleXMLElement Object 
       (
        [BrowseNode] => SimpleXMLElement Object 
         (
          [BrowseNodeId] => 196601011 
          [Name] => Baby & Toddler Toys 
          [Ancestors] => SimpleXMLElement Object 
           (
            [BrowseNode] => SimpleXMLElement Object 
             (
              [BrowseNodeId] => 165795011 
              [Name] => Categories 
              [IsCategoryRoot] => 1 
              [Ancestors] => SimpleXMLElement Object 
               (
                [BrowseNode] => SimpleXMLElement Object 
                 (
                  [BrowseNodeId] => 165793011 
                  [Name] => Toys & Games 
                ) 

               ) 

             ) 

           ) 

         ) 

       ) 

     ) 

) 

Halted for testing 

このコード:

$s = 'BrowseNodes/BrowseNode[Name=Categories]'; 
// I also tried $s = 'BrowseNodes/BrowseNode[Name="Categories"]'; 
$temp_bnid=$item->xpath($s); 
echo '<pre> 
Root Search: 
'; 
print_r($temp_bnid); 
echo '</pre>'; 
die('Halted for testing'); 

この出力を与える:

Root Search: 
Array 
(
) 

Halted for testing 

私が間違って何をやっている、私は「名前」ノードの値が「カテゴリー」で「名前」ノードが含まれているBrowseNodeノードを取得しようとしていますか?この問題の 代替ソリューションは、「IsCategoryRoot」ノードの存在にノードを選択するのだろうが、私は実際にそれが将来的にはより多くの私を助けるかもしれないとして、他のクエリを実行する方法を学びたいです。 Nietherのやり方は、私が排他的な質問を扱った。

+0

あなたが検索しようとしているXMLを投稿するには、SimpleXMLオブジェクトのダンプよりも役に立つかもしれません。 –

+0

XML入力のサンプルをお願いできますか?それはあなたを助けることがより簡単になります。しかし、私が見るもの与えられた:多分名前は属性であり、もしそうなら、あなたは試すことができます: 'BrowseNodes/BrowseNode [名@ =「カテゴリー」]'。 –

答えて

1

私はSimpleXMLのが効果的にダンプ読み取ることができないので、わからないんだけど、私は何を持っていることは、「カテゴリー」が含まれて名前呼ばれた子を持つ任意の子孫であると思います。だから、のようなもの:

BrowseNodes/BrowseNode//BrowseNode[Name="Categories"]

+0

ありがとうございます。それがトリックでした。それで未知の深さを示すのは二重スラッシュで、 "Categories"の引用符が必要でした。私はそれを得たと思う。上の矢印をクリックしてこの回答に役立つ印をつけようとしましたが、評判が足りません。 – TecBrat

+0

素晴らしい!正しい場合は、チェックをクリックして正しい答えを受け入れることができます。 –

+0

ありがとうございます。私はそれがアップとダウンの票が何だったのかと思った。 (実際に私は数年のためにそれから回答を得てきたにも関わらず、このフォーラムに投稿する新ブランド。) – TecBrat

1

あなたはこれを試してみたのですか?

$s="BrowseNodes/BrowseNode/Name[text()='Categories']/.."; 

名前ノードの親ノード(すなわち、browseNode)をどのテキストがカテゴリであるか選択する必要があります。