2011-08-05 40 views
0

我和格式不正确输入XML文件(即,它具有“&”而不是“ &放大器;”) 当我尝试加载使用PHP DOM这个XML,$ doc-> load(“file.xml”)它会抛出错误并停止解析。加载在PHP中无效的XML DOM

有什么方法可以加载这个未格式化的XML?不,我不能编辑源XML文件。 我曾尝试使用$ doc-> loadHTML(),但它会在各处引发错误。

我想知道是否有做一个适当的方式本(如加载文件的内容,并改变它使用正则表达式或类似的东西)

回答

0

首先,检查它的&这是造成错误,而不是别的东西。

无论如何,你必须修改XML才能解析它。 loadHTML中的HTML是从字符串中加载的,难道你不能用正确的替换无效字符吗?

如果您的安装支持PHP Tidy扩展(http://php.net/manual/en/book.tidy.php),您可以尝试使用它进行清理,尽管根据我的经验,它远非万无一失。

+0

是的,这是导致麻烦的&符号。我只是不想将所有&替换为&-amp;原因,然后当我得到一个有效的XML作为输入它会导致问题。我对整洁的延伸知道不多。它看起来更像一个HTML工具,并且可以找到适合XML清理的适当函数。 – Nithin

+0

我搜索了更多,Tidy似乎解决了这个问题。这是我就是这样做:'$配置=阵列( \t \t \t '缩进'=>真, \t \t \t '输入的XML'=>真, \t \t \t '输出的XML'=> TRUE); $ clean = $ tidy-> repairString(file_get_contents($ file),$ config); ' – Nithin

0

如果您确信这使得它无法验证的唯一的事情,那么你可以尝试加载文件转换成字符串file_get_contents()功能,然后搜索&通过字符串替换来改变&的成&的,然后将该字符串放入simpleXML中,如$xml = simplexml_load_string($cleaned_string);

+0

正如回复上述海报发布的那样,当我加载有效的xml时,会导致问题。 – Nithin

1

在通过$doc->loadHTML(...)加载XML之前,尝试设置$doc->validateOnParse = false;

+0

刚刚尝试过,这似乎并没有解决问题。 – Nithin