如何解析这个XML文件URL,为什么我收到此错误?

时间:2018-06-15 00:13:34

标签: php xml parsing foreach

我正在尝试解析此XML文件但我收到此错误:

警告:第13行为foreach()提供的参数无效

xml是错还是我错过了什么?

XML:

<ads>
<ad>
<id>
<![CDATA[ 9009394 ]]>
</id>
<address>
<![CDATA[ NewYork ]]>
</address>
<calle_nro>
<![CDATA[ 345 ]]>
</calle_nro>
</ad>
<ads>

PHP脚本:

<?php
  print '<table style="width:80%"><tr>
    <th>Nro</th>
    <th>link</th> </tr>';


$html   = file_get_contents("http://gvaonline.com.ar/eti/eti.xml");

$feed = simplexml_load_string($html);

foreach ($feed->ads->ad as $item) {


  $linkTit  = $item->address;
  $imgLink  = $item->calle_nro;
  echo '<tr>';

  echo '<td>' . $linkTit . '</td>';
  echo '<td> '. $imgLink .'</td>';
  echo '</tr>';


}

  echo '</table>';

?>

我也尝试使用simplexml_load_file()和内部的url,但是在foreach()中遇到了同样的问题。

2 个答案:

答案 0 :(得分:1)

所以在你的例子中看起来你的XML是无效的,但我猜这只是因为你输入了它,

你的最终xml标签应该是:

</ads>

至于你的错误,它看起来像是因为你错误地遍历XML对象。

将来调试的一种简单方法是print_r($ feed),这是它给出的输出:

SimpleXMLElement Object
(
    [ad] => SimpleXMLElement Object
        (
            [id] => SimpleXMLElement Object
                (
                )

            [address] => SimpleXMLElement Object
                (
                )

            [calle_nro] => SimpleXMLElement Object
                (
                )

        )
)

所以你应该这样做:

foreach ($feed->ad as $item) {

而不是

foreach ($feed->ads->ad as $item) {

答案 1 :(得分:0)

你的xml中有cdata,所以在解析时使用正确的语法。

类似的东西:

$feed = simplexml_load_file("http://gvaonline.com.ar/eti/eti.xml",'SimpleXMLElement', LIBXML_NOCDATA);

foreach ($feed->ad as $item) {


  $linkTit  = $item->address;
  $imgLink  = $item->calle_nro;
  echo '<tr>';

  echo '<td>' . $linkTit . '</td>';
  echo '<td> '. $imgLink .'</td>';
  echo '</tr>';


}