第三方xml上的php file_get_contents标签已损坏

时间:2013-05-01 05:01:47

标签: php xml tags simplexml

$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,因为我从远程服务获取它对我没有任何影响。

1 个答案:

答案 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;
    }
?>