2016-07-17 146 views
2

我不再是一名編碼員,上次我編寫C語言是在12年前。如何訪問此XML中的元素

我需要訪問的名字在這個XML:

<Customer> 
<data_0> 
    <FirstName>Michael</FirstName> 
</data_0> 
<data_1> 
    <FirstName>Jack</FirstName> 
</data_1> 
<data_2> 
    <FirstName>Luke</FirstName> 
</data_2> 
</Customer> 

奇怪的是,我的API調用返回的XML是不是正規的陣列,而不是顯示在Data_0的,數據1,數據等等。

我不知道什麼樣的代碼將工作訪問名字中的每個數據集?

我希望下面的代碼的工作,但沒有:提前

$xml = new SimpleXMLElement($results); 

for ($i = 0; $i < 5; $i++) 
{ 
$data="data_".$i; 

echo $xml->Customer[0]->$data->FirstName; 

} 

感謝。

+0

我的意思是echo $ xml-> Customer - > $ data-> FirstName; –

+1

嘿@FirstOne,它的工作,不知何故,我不知道我怎麼搞砸了,我測試了一次,但它沒有工作,現在它工作。謝謝!!! –

+0

將評論轉換爲答案... – FirstOne

回答

1

更換

echo $xml->Customer[0]->$data->FirstName; 

echo $xml->$data->FirstName; 

看到它在行動here


如果print_r($xml),你會看到,這是結構:

SimpleXMLElement Object 
(
    [data_0] => SimpleXMLElement Object 
     (
      [FirstName] => Michael 
     ) 

    [data_1] => SimpleXMLElement Object 
     (
      [FirstName] => Jack 
     ) 

    [data_2] => SimpleXMLElement Object 
     (
      [FirstName] => Luke 
     ) 

) 

所以,你已經有了各自data_X在手,你就必須讓他們。


你也使用foreach循環的元素,我們來看一看:

foreach($xml as $k => $v){ 
    echo "[$k]: " . $v->FirstName . '<br>'; 
} 

輸出:

[data_0]: Michael 
[data_1]: Jack 
[data_2]: Luke 
+0

感謝一堆,foreach循環是我需要使用的一個;) –

+0

只是要小心這個foreach。如果你有其他元素沒有'FirstName'作爲孩子,它不會'真正'工作。看看:[https://eval.in/606599](https://eval.in/606599) – FirstOne

+0

foreach循環無法正常工作。我想是因爲我沒有提供完整的XML文件的結構,它有額外的節點,所以現在我越來越[CONNECTION_STATUS]: [operation_status]: [客戶]: –

1

使用SimpleXMLElement::xpath功能簡單的解決方案:

$xml = simplexml_load_string($results); 
// "//../FirstName" - relative path to 'FirstName' items 
foreach ($xml->xpath("//../FirstName") as $name) { 
    echo (string) $name . PHP_EOL; 
} 

輸出:

Michael 
Jack 
Luke 
+1

這種解決方案似乎更好。我只是'修復了這個問題'。 +1 – FirstOne

+1

@FirstOne,非常感謝(也是+1) – RomanPerekhrest