【发布时间】:2023-03-05 12:10:01
【问题描述】:
我已经看到很多关于如何使用 CDATA 加载 XML 字符串或如何使用 CDATA 内容编写元素的问题,但我无法找到一种方法来编辑 XML已经包含 CDATA 并在使用 $xml->asXML() 后保留那些以前的 CDATA。
有没有办法编辑一个已经包含 CDATA 的 XML 并在使用 $xml->asXML() 后保留那些以前的 CDATA ?
看看这个场景:
<?php
$str_xml = "<myxml><mytag><![CDATA[In this content, 8 > 2 & 1 < 9, and 10 is a 10% of 100. ]]></mytag></myxml>";
try {
echo "XML with CDATA: \n\n";
$xml = simplexml_load_string($str_xml, null, LIBXML_NOCDATA);
echo $xml->asXML() ."\n\n";
} catch(Exception $e){
echo "XML with CDATA: \n\n";
echo $e->getMessage() ."\n\n";
}
?>
运行此示例后,输出为:
<?xml version="1.0"?>
<myxml><mytag>In this content, 8 > 2 & 1 < 9, and 10 is a 10% of 100. </mytag></myxml>
如您所见,此输出 XML 字符串不再具有 CDATA 标记值。使用此输出加载另一个 simplexml_load_string 不会失败,但现有的 CDATA 标记已消失,特殊字符也将替换为其对应的 html 实体。
我需要知道是否有办法读取任何包含任何个 CDATA 节点值的 XML,并且在使用 $xml->asXML() 之后,输出字符串仍然包含以前的 CDATA 标记值。
感谢您的帮助。
【问题讨论】: