Php 使用SimpleXMLElement使用CDATA编辑XML
我已经看到了很多关于如何使用CDATA加载XML字符串,或者如何使用CDATA内容编写元素的问题,但我还没有找到一种方法来编辑已经包含CDATA的XML,并在使用Php 使用SimpleXMLElement使用CDATA编辑XML,php,simplexml,cdata,Php,Simplexml,Cdata,我已经看到了很多关于如何使用CDATA加载XML字符串,或者如何使用CDATA内容编写元素的问题,但我还没有找到一种方法来编辑已经包含CDATA的XML,并在使用$XML->asXML()后保留以前的CDATA 在使用$XML->asXML()后,是否有方法编辑已经包含CDATA的XML并保留以前的CDATA? 看看这个场景: <?php $str_xml = "<myxml><mytag><![CDATA[In this content, 8 > 2
$XML->asXML()
后保留以前的CDATA
在使用$XML->asXML()
后,是否有方法编辑已经包含CDATA的XML并保留以前的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";
}
?>
asXML()。“\n\n”;
}捕获(例外$e){
echo“带CDATA的XML:\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>
在本内容中,8 2&;19,10是100的10%。
如您所见,此输出XML字符串不再具有CDATA标记值。使用此输出加载另一个simplexml\u load\u string
,它不会失败,但是现有的CDATA标记将消失,并且特殊字符将被其相应的html实体替换
我需要知道是否有方法读取任何包含任何数量的CDATA节点值的XML,并且在使用$XML->asXML()
后,输出字符串仍然包含以前的CDATA标记值
谢谢您的帮助。写出的XML不包含CDATA节点,因为您在传递
LIBXML\u NOCDATA
时告诉SimpleXML去掉它们。要保留它们,请不要通过该选项
,详情如下:
<?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);
echo $xml->asXML() ."\n\n";
} catch(Exception $e){
echo "XML with CDATA: \n\n";
echo $e->getMessage() ."\n\n";
}
杰出的我从未尝试过这样处理它,因为我一直认为处理CDATA标记需要特殊的选项等。当然,添加CDATA标记需要DOMDocument::CreateCataSection的帮助(举个例子)。谢谢
$xml = simplexml_load_string($str_xml);
$tag_content = (string)$xml->mytag;
echo "Here is the content of the <mytag> node: $tag_content";