simple_xml解析器错误,带有xml中的引号,即使使用CDATA也是如此

时间:2013-02-12 14:46:10

标签: xml simplexml php

我正在从数组(来自数据库)中使用simplexml_load_string()读取XML。

在XML包含引号之前一切正常,simplexml开始报告XML解析错误。

  1. 我在XML文件中将"更改为" - >解析器错误。
  2. 我转发了XML中的",如\" - >解析器错误。
  3. 我使用'代替" - >一切都很好,但我想要"
  4. 因此,我将包含""的部分纳入CDATA - >解析器错误了!`
  5. 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
    

2 个答案:

答案 0 :(得分:0)

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

str_replace('"', '&#34;', $xml);

答案 1 :(得分:0)

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

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

谢谢大家的帮助!