我正在使用简单的项目从xml读取数据并保存到数据库中。但我有一个问题,而阅读XML文件。下面是一些概要:
My parser.php code:
if (file_exists('zero.xml')) {
$xml = simplexml_load_file('zero.xml');
echo $xml->productURL;
} else {
exit('Failed to open test.xml.');
}
和zero.xml文件包含:
<product sku="107">
<price>6999</price>
<productURL>https://www.example.com/in/open.pl?user_id=2&b=96</productURL>
</product>
在运行代码时没有得到任何输出,只有警告。
EntityRef:期待';'在C:'xampp'htdocs'sqlsvr2012'parser.php on第31行
当我替换url
中的"&"运算符时user_id = 2, b = 96
;或者,这就给出了输出。但这不是确切的url格式,这是不可接受的。我不知道为什么这对&操作符。请帮我解决这个问题
我添加了一点解决方案,答案不理想,但将工作。您可能需要加载文件内容并执行查找和替换操作str_replace()
,如& -> &
,并将精炼的内容传递给简单的xml解析器
<?php
$path_to_file = 'path/to/the/file.xml';
$file_contents = file_get_contents($path_to_file);
$file_contents = str_replace("&",",&",$file_contents);
simplexml_load_string($file_contents);
?>
希望这可能会有所帮助!
裸&
不是有效的XML字符数据,因为它用于表示命名实体的开始。您有几种选择,包括将值封装在CDATA块中,或者我的首选选择是使用?user_id=2&b=96
&
实体。<<p> 实体例子/strong> <productURL>https://www.example.com/in/open.pl?user_id=2&b=96</productURL>
<<p> CDATA例子/strong> <productURL><![CDATA[https://www.example.com/in/open.pl?user_id=2&b=96]]></productURL>
XML规范对这个问题有如下规定:
与字符(&)和左尖括号(<)不能以文字形式出现,除非用作标记分隔符,或者在注释、处理指令或CDATA部分中使用。如果在其他地方需要它们,则必须使用数字字符引用或字符串"&和"<分别"。>
——http://www.w3.org/TR/REC-xml/语法