我正在使用简单项目从xml读取数据并保存到数据库中。但是我在阅读XML文件时遇到了一个问题。一些简要说明如下:
我的 parser.php 代码:
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:期待&#39 ;;&#39;在C:\ xampp \ htdocs \ sqlsvr2012 \ parser.php上 第31行
当我更换&#34;&amp;&#34; url中的运算符
USER_ID = 2和b = 96
用;或者:然后这给我输出。但这不是确切的网址格式,这是不可接受的。我不知道为什么这不适用于&amp;运营商。请帮我解决这个问题。
答案 0 :(得分:0)
裸&
不是有效的XML字符数据,因为它用于表示命名实体的开始。您有几个选项,包括将值括在CDATA块中,或者我首选的选项是使用&
实体?user_id=2&b=96
实体示例
<productURL>https://www.example.com/in/open.pl?user_id=2&b=96</productURL>
CDATA示例
<productURL><![CDATA[https://www.example.com/in/open.pl?user_id=2&b=96]]></productURL>
XML规范在此问题上说明如下:
&符号(&amp;)和左尖括号(&lt;)不得以其文字形式出现,除非用作标记分隔符,或用于注释,处理指令或CDATA部分。如果在其他地方需要它们,则必须使用数字字符引用或字符串&#34;来转义它们。 &安培; &#34;和&#34; &LT; &#34;分别。
答案 1 :(得分:0)
我正在为salathe添加一些不太理想的解决方案,但会起作用。您可能必须加载文件内容并执行查找和替换操作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);
?>
希望这可能有所帮助!