2016-07-17 7 views
2

Ich bin nicht mehr ein Programmierer, ich das letzte Mal codiert C Sprache vor 12 Jahren war.Wie Element für den Zugriff auf diese XML

Ich brauchte den First in diesem XML zuzugreifen:

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

Seltsam, die XML durch meinen API-Aufruf zurückgegeben wird, ist kein reguläres Array, eher angezeigt in data_0, data_1, data_2 und so weiter.

Ich frage mich, welche Art von Code, um den First in jedem Datensatz zugreifen funktionieren würde?

Ich hatte gehofft, dass der folgende Code funktionieren würde, aber nicht:

$xml = new SimpleXMLElement($results); 

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

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

} 

Vielen Dank im Voraus.

+0

Ich meinte echo $ xml-> Kunde -> $ data-> FirstName; –

+1

Hey @FirstOne, es hat funktioniert, irgendwie weiß ich nicht, wie ich es vorher vermasselt habe, ich habe es einmal getestet, aber es hat nicht funktioniert, jetzt hat es funktioniert. Vielen Dank!!! –

+0

Converted Kommentar in einer Antwort ... – FirstOne

Antwort

1

ersetzen

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

mit

echo $xml->$data->FirstName; 

es Siehe in Aktion here.


Wenn Sie print_r($xml), werden Sie sehen, dass dies die Struktur ist:

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

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

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

) 

So haben Sie bereits jede data_X bei der Hand, man muss nur sie bekommen.


Sie könnten auch einen foreach Schleife verwenden die Elemente, werfen Sie einen Blick:

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

Ausgang:

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

danken ein Bündel, foreach-Schleife ist diejenige, die ich verwenden müssen;) –

+0

Nur vorsichtig sein, über diese foreach. Wenn Sie andere Elemente haben, die nicht als Kind "Vorname" haben, wird es nicht wirklich funktionieren. Werfen Sie einen Blick: [https://eval.in/606599](https://eval.in/606599) – FirstOne

+0

die foreach-Schleife funktioniert nicht wie es soll. Ich denke, weil ich nicht die volle XML-Dateistruktur vorsah, es zusätzliche Knoten hat, so dass ich jetzt bin immer [connection_status]: [operation_status]: [Kunde]: –

1

Einfache Lösung mit SimpleXMLElement::xpath Funktion:

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

Die Ausgabe:

Michael 
Jack 
Luke 
+1

Diese Lösung scheint besser zu sein. Meins "behebt das Problem". +1 – FirstOne

+1

@FirstOne, vielen Dank (nehmen Sie auch +1) – RomanPerekhrest

Verwandte Themen