2012-02-08 78 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 

我在做什麼錯誤,當我試圖讓包含「Name」節點的「Name」節點值爲「Categories」的BrowseNode節點? 這個問題的另一種解決方案是選擇存在「IsCategoryRoot」節點的節點,但我真的想了解如何執行其他查詢,因爲它可能會在未來幫助我更多。 Niether的方式與我處理的查詢有關。

+0

發佈你想搜索可能比SimpleXML的對象的轉儲更有幫助的XML。 – 2012-02-08 16:57:02

+0

您能舉一個XML輸入樣本嗎?幫助你會更容易。但給我看到:也許名稱是一個屬性,如果是這樣,你可以嘗試:'BrowseNodes/BrowseNode [@ Name =「Categories」]'。 – 2012-02-08 17:00:57

回答

1

我不確定,因爲我無法有效地閱讀SimpleXML轉儲,但我認爲您擁有的是名爲包含「Categories」的名爲Name的子任意後代。因此,像:

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

+0

謝謝。那就是訣竅。所以這是表明未知深度的雙斜線,我確實需要「類別」的引號。我想我明白了。我試圖點擊向上箭頭標記這個答案有幫助,但我沒有足夠的聲望。 – TecBrat 2012-02-08 18:08:42

+0

太棒了!如果它是正確的,你可以點擊勾來接受答案是正確的。 – 2012-02-08 23:53:27

+0

謝謝。我認爲這就是上下選票的原因。 (儘管我已經從中獲得了幾年的答案,但實際上在這個論壇上發佈的新品牌)。 – TecBrat 2012-02-09 03:04:25

1

你嘗試過嗎?

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

哪個應該選擇父節點(ie:browseNode)作爲文本是類別的Name節點。