2009-10-01 127 views
1

我有一個xml文件,我想在一個變量中存儲節點的rank屬性。如何獲取所需的xpath元素?

我想:

echo $var = $xmlobj->xpath("//Listing[@rank]"); 

無濟於事,它只是打印ArrayArray

這怎麼辦?

if($xmlobj = simplexml_load_string(file_get_contents($xml_feed))) 
     { 
      foreach($xmlobj as $listing) 
      { 

        // echo 'Session ID: ' . $sessionId = $listing->sessionId . '<br />'; 
        // echo 'Result Set: ' . $ResultSet = $listing->ResultSet . '<br />'; 

        print_r($xmlobj->xpath("//Listing[@rank]")); 

        // $result = $xmlobj->xpath("/page/"); 
        // print_r($result); 

      } 
     } 

Henrik的建議:

foreach($xmlobj as $listing) 
{ 
     $var = $xmlobj->xpath("//Listing[@rank]"); 

     foreach ($var as $xmlElement) 
     { 
      echo (string)$xmlElement; 
     } 
} 

在這裏,你去與發佈示例XML玩耍後

<page> 
    <ResultSet id="adListings" numResults="3"> 
     <Listing rank="1" title="Reliable Local Moving Company" description="TEST." siteHost="www.example.com"> 
     </Listing> 

回答

2

編輯:

  • 我最初的回答多少有些偏離軌道 - 鑄造成字符串會給你內文本中選定的元件的,如果它們具有一個(而不是在這裏的情況下)
  • "//Listing[@rank]"選擇所有「清單」的元素具有一個「秩」屬性。如果你想選擇的屬性本身,用"//Listing/@rank"
  • 要輸出的屬性,使用的SimpleXMLElement與數組語法:$xmlElement['rank']

所以你的情況:

foreach($xmlobj as $listing) 
{ 
    $var = $xmlobj->xpath("//Listing/@rank"); 
    foreach ($var as $xmlElement) 
    { 
     echo $xmlElement['rank']; 
    } 
} 

foreach($xmlobj as $listing) 
{ 
    $var = $xmlobj->xpath("//Listing[@rank]"); 
    foreach ($var as $xmlElement) 
    { 
     echo $xmlElement['rank']; 
     echo $xmlElement['title']; // Added to demonstrate difference 
    } 
} 

應該工作。

在第一種情況中,$ XMLELEMENT將僅包含「秩」屬性而在第二,它會包含完整的「清單」元件(因此允許的標題輸出)。

+0

感謝您的答覆亨裏克。不幸的是它不起作用,我的代碼實現在上面? – 2009-10-01 15:33:34

+0

嗯,奇怪 - 它打印什麼? – 2009-10-01 15:35:33

+0

只是一個空白屏幕,並沒有錯誤 – 2009-10-01 15:39:55