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> 

Как ни странно, XML, возвращаемый мой API вызов не является обычным массив, а отображаются в data_0, данные_1 данные_2 и так далее.

Интересно, какой код будет работать для доступа к первому в каждом наборе данных?

Я надеялся, что следующий код будет работать, но не сделал:

$xml = new SimpleXMLElement($results); 

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

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

} 

Спасибо заранее.

+0

Я имел в виду эхо $ xml-> Клиент -> $ 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

Смежные вопросы