Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/user-interface/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 使用SimpleXMLElement使用CDATA编辑XML_Php_Simplexml_Cdata - Fatal编程技术网

Php 使用SimpleXMLElement使用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

我已经看到了很多关于如何使用CDATA加载XML字符串,或者如何使用CDATA内容编写元素的问题,但我还没有找到一种方法来编辑已经包含CDATA的XML,并在使用
$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 &gt; 2 &amp; 1 &lt; 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";