加载标记文件 xml PHP

Load tag file xml PHP

我有一个 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: ...

您需要像 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

在根元素周围使用 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/>";
    }
}