我一直在尝试解析this feed。如果你点击那个链接,你会发现它甚至不能正确地在浏览器中解析它。
无论如何,我的托管服务不允许我使用simplexml加载文件,所以我一直在使用curl获取它,然后将字符串加载到dom中,如下所示:

$dom = new DOMDocument;
$dom->loadXML($rawXML);
if (!$dom) {
 echo 'Error while parsing the document';
 exit;
}
$xml = simplexml_import_dom($dom);

但是我得到了错误(“domdocument::loadxml()[domdocument.loadxml]:entity'nbsp'未在entity中定义”),然后我尝试使用simplexmlement,但没有成功(它显示了相同的错误“parser error:entity'nbsp'未定义”,等等……因为那一个元素中有html)。
$xml = new SimpleXMLElement($rawXML);

所以我的问题是,我如何跳过/忽略/删除那个元素,这样我就可以分析剩下的数据了吗?
编辑:感谢美赞臣的解决方案!…我刚刚做了这个(为其他有同样麻烦的人)
$rawXML = str_replace('<description>','<description><![CDATA[',$rawXML);
$rawXML = str_replace('</description>',']]></description>',$rawXML);

最佳答案

您可能需要引入一个预解析步骤,该步骤将添加

<![CDATA[

在每个标记之后
并添加
]]>

在每个标记之前
具体来说,(请参阅meder的响应以获取相应的php片段)
<description>blah <br />&nbsp; blah, blah...</description>
should become
<description><![CDATA[blah <br />&nbsp; blah, blah...]]></description>

以这种方式,“decription”元素的完整内容将被“转义”,以便忽略在该元素中找到的、容易抛出xml解析逻辑的任何html(甚至xhtml)构造。这将解决您提到的问题,同时也解决许多其他常见问题。

10-08 08:40
查看更多