0

我正在simplexml_load_string()从数组(从数据库)读取 XML。

一切都很好,直到 XML 包含引号,simplexml 开始报告 XML 解析错误。

  1. 我更改""XML 文件中的 --> 解析器错误。
  2. "我在 XML 中转义了\"--> parser-error。
  3. 我用'而不是"--> 一切都很好,但我想要"
  4. 所以我再次将部分与""into CDATA--> parser-error 一起包含在内!`

XML 片段:

<prepare var="%vorfall%" label="Bezeichnen Sie den Vorfall">
    <![CDATA["Vorfall beim Reiten..."]]>
</prepare>

PHP 片段:

$rxml=simplexml_load_string(utf8_encode($test['tsValues']));

错误 - 使用&#34;而不是"

Warning: simplexml_load_string(): Entity: line 16: parser error : attributes construct error in /Applications/MAMP/htdocs/_testcenter/testcenter.php on line 97

Warning: simplexml_load_string(): <prepare var=""Unfall beim Reiten, Rocky geht durch"" label="Bezeichnen Sie den in /Applications/MAMP/htdocs/_testcenter/testcenter.php on line 97

Warning: simplexml_load_string(): ^ in /Applications/MAMP/htdocs/_testcenter/testcenter.php on line 97

Warning: simplexml_load_string(): Entity: line 16: parser error : Couldn't find end of Start Tag prepare line 16 in /Applications/MAMP/htdocs/_testcenter/testcenter.php on line 97

Warning: simplexml_load_string(): <prepare var=""Unfall beim Reiten, Rocky geht durch"" label="Bezeichnen Sie den in /Applications/MAMP/htdocs/_testcenter/testcenter.php on line 97

Warning: simplexml_load_string(): ^ in /Applications/MAMP/htdocs/_testcenter/testcenter.php on line 97

更新:再次检查,问题发生在这里 - PHP:

$txml=file_get_contents("$path_test/".$test['tbTestFile']);
$rxml=simplexml_load_string($test['tsValues']);

// replacing parts of $txml with content containing the famous "" from $rxml 
foreach ($rxml->xpath('//prepare') as $prep) {
    $txml=str_replace($prep['var'],$prep,$txml);
} 

$txml=simplexml_load_string($txml); // this is line 97
4

2 回答 2

0

&quot;CDATA并按&#34;预期使用 simplexml。

我的错误:代码替换%vorfall%了 xml 文件中的 substr。该子字符串出现在节点的文本中(可以替换)和属性var="%vorfall%"中。当属性具有 double "":时发生解析错误var=""some-replaced-content""

谢谢大家的帮助!

于 2013-02-13T09:39:35.887 回答
0

尝试替换其 XML 等效实体的引号:&#34;

str_replace('"', '&#34;', $xml);
于 2013-02-12T15:03:02.320 回答