$url = "http://example.com/get-xml.php"; // contains broken XML
$file = file_get_contents($url);
$xml = simplexml_load_string($file);
调用simplexml_load_string时收到的消息:
“警告:simplexml_load_string()[function.simplexml-load-string]:实体:第216行:解析器错误:”
中属性mod的规范授权值警告:simplexml_load_string()[function.simplexml-load-string]:
总之,有一个带有空格的XML标记,它打破了一切。
所以使用PHP,我从第三方导入XML,坏的XML标签打破了整个导入。有没有更好的方法通过查看每个特定的XML标记来读取非XML?或者我至少可以忽略破碎的标签?
我想理想情况下我想要一个显示XML标签的file_get_contents
方法。对noob的任何建议?我无法更改第三方XML,因为我从远程服务获取它对我没有任何影响。
答案 0 :(得分:0)
PHP 5.1+允许您解析格式不正确的XML文档并添加缺少的元素,例如。缺少结束标签。
如果您必须解析对您没有任何影响的XML文档,这可能非常有用。
要使用此功能,您只需在加载XML文档之前将DomDocument属性recover设置为true,然后加载XML文档将始终返回或多或少有用的内容:
<?php
$xml = new DomDocument();
$xml->recover=true;
$xml->loadXML('<root><tag>hello world</root>');
print $xml->saveXML();
?>
会返回(除了一堆错误,结果仍会显示)。
此处的代码演示:phpFiddle
更新以使xml原样:
如果你可以使用curl这应该达到你的目标..尝试一下让我知道
<?php
function curl_get_file_contents($URL)
{
$c = curl_init();
curl_setopt($c, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($c, CURLOPT_URL, $URL);
$contents = curl_exec($c);
curl_close($c);
if ($contents) return $contents;
else return FALSE;
}
?>