我想解析外部php feed。 地址: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
有任何想法吗?
谢谢!
答案 0 :(得分:0)
如果您尝试加载服务器上保存的xml,请尝试传递完整目录路径
simplexml_load_file($_SERVER['DOCUMENT_ROOT'].'/example.xml')
或者如果你想通过http协议访问xml,你需要在php.ini或
中设置allow_url_fopen ONini_set('allow_url_fopen ','ON');
你的代码中的。或者如果你使用的是php版本&lt; 5
,你也可以这样做$temp = file_get_contents($url);
$XmlObj = simplexml_load_string($temp);
答案 1 :(得分:0)
我担心Feed会提供格式错误的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,但老实说,我不确定这是值得的。
答案 2 :(得分:0)
&
)。在xml中,&符是实体标记(=命名符号的开头(序列)或字符代码点的数字表示),必须进行转义。
在您的网址中将&
替换为&
,或将网址标记为文字文字(xml中的CDATA部分):<![CDATA[http://...]]>
。
例如。 :<addurl><![CDATA[http://www.hittadjur.se/index.php?page=case&type=&county=32&subpage=show&case=1363984558]]></addurl>
如果您对代码中的快速utf8转换感到不舒服并且您知道数据源的字符编码,则可以增强xml序言(iso-8859-1包含有问题的å
/ {{1你的xml):
0xE5