【发布时间】:2014-05-04 20:40:39
【问题描述】:
我正在开发一个网站,我需要加载一个 xml 文件——比如说 test.xml
XML 节点格式正确,但其中的值却不是。每个节点的值都是 CDATA 嵌套字符串(但 CDATA 并不总是格式正确)。 示例:
<root>
<data>
<value1><![CDATA[Some value]]></value1>
<value2><![CDATA[ ]]></value2>
<value3>![CDATA[ ]]></value3>
</data>
</root>
原始的 XML 结构更复杂,但这是 CDATA 使用的示例。在节点 value3 中,CDATA 无效(在 '![CDATA' 之前缺少 '
我尝试使用以下代码加载文件
<?php
$xml = simplexml_load_file("test.xml");
?>
但我收到了警告。
然后我尝试使用 LIBXML_NOCDATA,但没有改进。 我试过的第二个代码是:
<?php
$xml = simplexml_load_file("test.xml", null, LIBXML_NOCDATA);
//$xml = simplexml_load_file("test.xml", 'SimpleXMLElement', LIBXML_NOCDATA);
?>
但仍然有警告(两行)。
是否可以加载文件然后解析它(例如$xml->data->value3)?
【问题讨论】:
-
LIBXML_NOCDATA 不是灵丹妙药,与长久以来的神话相反,它实际上对 SimpleXML 毫无用处,因为 SimpleXML 本身可以很好地处理 CDATA。我在这里解释了它的作用:stackoverflow.com/a/13981917/157957 你的问题更加平凡:你破坏了 XML;损坏的位应该是 CDATA 部分这一事实无济于事,因为它们已损坏,所以它们不是。