我正在开发一个网站,我需要加载一个xml文件 - 让我们说一下test.xml
XML节点格式良好,但其中的值不是。每个节点的值都是CDATA嵌套字符串(但CDATA并不总是格式良好)。 例如:
<root>
<data>
<value1><![CDATA[Some value]]></value1>
<value2><![CDATA[ ]]></value2>
<value3>![CDATA[ ]]></value3>
</data>
</root>
原始XML结构更复杂,但这是CDATA使用的示例。在节点值3中,CDATA无效(在#CD;&#39;之前缺少&#39;&lt;&#39;字符。
;我尝试使用以下代码加载文件
<?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-&gt; data-&gt; value3)?
答案 0 :(得分:0)
这不是有效的XML文件
所以你应该在使用前修复它 最简单的方法 - 使用PHP中包含的Tidy lib
<?php
error_reporting(E_ALL);
$file = '1.xml';
$tidy = new tidy();
$repaired = $tidy->repairfile($file, array(
'input-xml' => true,
'escape-cdata' => false
));
var_dump(simplexml_load_string($repaired));
答案 1 :(得分:0)
如果你得到错误的XML,正确的方法总是找出原因,并消除根本原因。如果它是您真正无法控制的数据源,请认真考虑不使用它:如果质量太差,数据真的值得拥有吗?