【问题标题】:SimpleXML parse external php feedSimpleXML 解析外部 php 提要
【发布时间】:2013-04-03 09:28:05
【问题描述】:

我想解析一个外部 php 提要。 地址:http://www.hittadjur.se/feed.php?count=1

输出:

<?xml version="1.0"?>
<annons>
<rubrik>Wilja</rubrik>
<datum>2013-03-22</datum>
<ras>Chihuahua långhår</ras>
<ort>Göteborg</ort><bildurl>http://www.hittadjur.se/images/uploaded/thumbs/1363984467.jpg</bildurl><addurl>http://www.hittadjur.se/index.php?page=case&type=&county=32&subpage=show&case=1363984558</addurl>
</annons>

我的 PHP 代码不起作用:

$content = utf8_encode(file_get_contents('http://www.hittadjur.se/feed.php?count=1'));
$xml = simplexml_load_file($content);
echo $xml->annons->rubrik;

我使用utf8_encode 的原因是,如果我不这样做,我会收到此消息:

parser error : Input is not proper UTF-8, indicate encoding ! Bytes: 0xE5 0x6E 0x67 0x68

现在的错误是:

Warning: simplexml_load_file() [function.simplexml-load-file]: I/O warning : failed to load external entity 有任何想法吗? 谢谢!

【问题讨论】:

    标签: php xml simplexml feed feedparser


    【解决方案1】:

    如果您尝试加载保存在服务器上的 xml,请尝试传递完整的目录路径

    simplexml_load_file($_SERVER['DOCUMENT_ROOT'].'/example.xml')
    

    或者如果你想通过 http 协议访问 xml,你需要在 php.ini 中设置 allow_url_fopen 或者

    ini_set('allow_url_fopen ','ON');
    

    在您的代码中。或者,如果您使用的是 php 版本 ,也可以这样做

    $temp = file_get_contents($url);
     $XmlObj = simplexml_load_string($temp); 
    

    【讨论】:

    • 嗨!这是一个不在我的服务器上的外部提要。我应该在哪个服务器上设置allow_url_fopen?
    【解决方案2】:

    就像 alvaro vicario 所写,问题出在您的网址中的参数分隔符 (&amp;amp;)。在 xml 中,& 符号是一个实体标记(= 命名符号(序列)的开头或字符代码点的数字表示),必须进行转义。

    要么在您的网址中将 &amp;amp; 替换为 &amp;amp;,要么将网址标记为文字文本(xml 中的 CDATA 部分):&lt;![CDATA[http://...]]&gt;

    例如。 :&lt;addurl&gt;&lt;![CDATA[http://www.hittadjur.se/index.php?page=case&amp;type=&amp;county=32&amp;subpage=show&amp;case=1363984558]]&gt;&lt;/addurl&gt;

    如果您对代码中的快速 utf8 转换感到不舒服并且您知道数据源的字符编码,则可以增强 xml 序言(iso-8859-1 包含您的冒犯 å/0xE5 xml):

    <?xml version="1.0" encoding="iso-8859-1"?>
    

    【讨论】:

      【解决方案3】:

      恐怕提要提供了格式错误的 XML。除了编码混乱:

      <addurl>http://www.hittadjur.se/index.php?page=case&type=&county=32&subpage=show&case=1363984558</addurl>
                                                         ^
                                                         \_ Data not properly escaped
      

      我可能错了,但我认为您不能使用常规 XML 函数对其进行解析,因为它们是为有效的 XML 设计的(这就是首先使用 XML 的全部目的)。

      也许你可以试试DOMDocument。它是为 HTML 设计的,因此它可以处理无效输入,但它也可以处理 XML。

      编辑:这里是a trick to fix invalid XML,但老实说,我不确定这是否值得。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2011-02-23
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-06-11
        • 1970-01-01
        • 2017-05-19
        • 1970-01-01
        相关资源
        最近更新 更多