2011-01-22 42 views
2

我正在接收基於請求放置到服務器的XML響應,它確實返回了一組有效的結果,我可以使用print_r() 轉儲結果集看起來像這樣(編輯:這是文件的確切結構):通過索引概要訪問simpleXML節點em

<root> 
    <main_node1> 
     <value1>one</value1> 
     <value2>two</value2> 
    </main_node1> 
    <main_node2> 
     <anothervalue>whatever</anothervalue> 
    </main_node2> 
    <recordset> 
     <record> 
      <value1>one</value1> 
      <value2>two</value2> 
     </reocrd> 
     <record> 
      <value1>one</value1> 
      <value2>two</value2> 
     </reocrd> 
     <record> 
      <value1>one</value1> 
      <value2>two</value2> 
     </reocrd> 
    </recordset> 
</root> 

當我使用該行:

$xml = simplexml_load_string($xmlRequest); 
$records = $xml->recordset->record; 

我可以通過$記錄陣列與foreach循環不走任何問題,但是當我嘗試訪問記錄中的特定記錄時et使用索引如

$record = $xml->recordset->record[$index]; 

我得到一個NULL瓦爾回來。我也嘗試將結果轉換爲(數組),但迄今爲止沒有成功。

我看過的關於simpleXML的每個文檔都說可以通過索引訪問XML節點,有人可以告訴我我在這裏可能會做錯什麼嗎?

編輯:所以記錄集不是文檔的根目錄,但我可以使用$ xml-> recordset->記錄符號將記錄列表加載到我的$ records變量中並使用foreach將其打印出來循環。

+1

可不可以給一個完整的例子失敗? (XML以及您使用的代碼,或者爲了示例而使用的代碼類似) – 2011-01-22 21:40:31

回答

1

我解決我的問題,通過使用

$records = $xml->xpath('//record'); 

符號和我現在能夠通過他們的索引來訪問任何記錄?

謝謝你的努力,我感謝你的努力。

0

因爲'recordset'節點是你的$ xml變量的根目錄(不知道我是否正確描述了這個)。

這應該工作:

<?php 
    //Example xml, replace this with $xml = simplexml_load_string($xmlRequest); 
    $xml = simplexml_load_string('<?xml version="1.0"?> 
    <recordset><record><value1>one</value1><value2>two</value2></record> 
    <record><value1>one</value1><value2>two</value2></record> 
    </recordset>'); 

    $record = $xml->record[0]; 
    print_r ($record); 

>

0

另一種方式來做到這一點,而無需使用XPath是:

以此爲基礎:

$record = $xml->recordset->record[$index]; 

你得賺指數如int,由於某種原因,只是接收這是行不通的。所以:

$index = trim($_GET['index']); 
$index = intval($index); 

現在,這將工作:

$record = $xml->recordset->record[$index]; 

最好的問候, RaphaelDDL