Simplexml_load_file给出did 't工作读取节点包含url与查询字符串


simplexml_load_file give didn't work read node which contains url with query strings?

我正在使用简单的项目从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(),如& -> &amp;,并将精炼的内容传递给简单的xml解析器

<?php
$path_to_file = 'path/to/the/file.xml';
$file_contents = file_get_contents($path_to_file);
$file_contents = str_replace("&",",&amp;",$file_contents);
simplexml_load_string($file_contents);
?>

希望这可能会有所帮助!

&不是有效的XML字符数据,因为它用于表示命名实体的开始。您有几种选择,包括将值封装在CDATA块中,或者我的首选选择是使用?user_id=2&amp;b=96

之类的&amp;实体。<<p> 实体例子/strong>
<productURL>https://www.example.com/in/open.pl?user_id=2&amp;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/语法