Загрузить файл тега xml Переполнение стека

У меня есть файл XML, и я хотел получить значения, которые находятся в <arquivo> тег,

<Listings>
<Listing>
<id>1</id>
<endereco>abc</endereco>
<Media>
<foto>
<arquivo>foto1.jpg</arquivo>
</foto>
<foto>
<arquivo>foto2.jpg</arquivo>
</foto>
</Media>
</Listing>
<Listing>
<id>2</id>
<endereco>rua X</endereco>
<Media>
<foto>
<arquivo>...</arquivo>
</foto>
<foto>
<arquivo>...</arquivo>
</foto>
</Media>
</Listing>
</Listings>

но я не уверен, что не так с моим PHP

$listings = simplexml_load_file("file.xml");

foreach ($listings as $listing):

echo 'endereco: ' . trim($listing->endereco) . "<br>";

foreach($listing->Media as $items):
foreach($items as $item):
echo 'Image: ' . trim($item) . "<br>";
endforeach;
endforeach;

endforeach;

Результат моего кода

endereco: abc
Imagem:
Imagem:
endereco: rua X
Imagem:
Imagem:

но я надеялся, что это будет

endereco: abc
Imagem: foto1.jpg
Imagem: foto2.jpg
endereco: rua X
Imagem: ...
Imagem: ...

0

Решение

Вы должны войти на каждый уровень структуры, как вы сделали для enderco, Взгляни на:

$x = new simplexmlelement('<Listings>
<Listing>
<id>1</id>
<endereco>abc</endereco>
<Media>
<foto>
<arquivo>foto1.jpg</arquivo>
</foto>
<foto>
<arquivo>foto2.jpg</arquivo>
</foto>
</Media>
</Listing></Listings>');
foreach ($x as $listing):
echo 'endereco: ' . trim($listing->endereco) . "<br>";
foreach($listing->Media as $items):
foreach($items->foto as $foto):
echo 'Image: ' . trim($foto->arquivo) . "<br>";
endforeach;
endforeach;
endforeach;

https://3v4l.org/0bcfj

2

Другие решения

Используйте цикл foreach вокруг корневых элементов, а затем используйте запрос XPath для более легкого доступа к внутренним элементам. Он все еще довольно хакерский с двумя циклами foreach, но он должен работать нормально.

<?php
$listings = simplexml_load_file("file.xml");
foreach ($listings as $listing) {
echo "endereco: $listing->endereco<br/>";
$arquivos = $listing->xpath("Media/foto/arquivo");
foreach ($arquivos as $ar) {
echo "Imagem: $ar<br/>";
}
}
1

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector