2016-07-17 2 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、DATA_1、DATA_2に表示されていません。

各データセットのFirstNameにアクセスするためにどのようなコードが動作するのだろうか?

私は、次のコードは動作望んでいなかったがされた:事前に

$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->$data->FirstName; 

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

を交換して、アクションhereでそれを参照してください。


あなたprint_r($xml)場合は、この構造であることがわかります:あなたはすでに手元に各data_Xを持って

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

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

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

) 

だから、あなたはちょうどそれらを取得する必要があります。

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

出力:SimpleXMLElement::xpath機能を使用して

[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]: [Customer]: –

1

シンプルなソリューション:

$xml = simplexml_load_string($results); 
// "//../FirstName" - relative path to 'FirstName' items 
foreach ($xml->xpath("//../FirstName") as $name) { 
    echo (string) $name . PHP_EOL; 
} 
をあなたも見て、ループに要素を foreachを使用することができ


出力:

Michael 
Jack 
Luke 
+1

この解決策はより良いようです。私のほうが問題を解決します。 +1 – FirstOne

+1

@FirstOne、ありがとうございます(+1も受け取ります) – RomanPerekhrest

関連する問題