Загрузить файл тега xml PHP - PullRequest
0 голосов
/ 08 ноября 2018

У меня есть файл 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: ...

Ответы [ 2 ]

0 голосов
/ 08 ноября 2018

Используйте цикл 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/>";
    }
}
0 голосов
/ 08 ноября 2018

Вы должны войти на каждый уровень структуры, как вы сделали для 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

...