我知道这个问题之前已被多次询问,但仍无法找到我一直在寻找使用php DOMDocument函数解析xml文档的预期结果。
最初,我的名为“local.xml”的xml文档包含以下脚本
<?xml version="1.0" encoding="utf-8"?>
<config>
<global>
<host><![CDATA[name123]]></host>
<username><![CDATA[root45]]></username>
</global>
</config>
我想将“<host><![CDATA[name123]]></host>
”更改为“<host><![CDATA[name456]]></host>
”
我有PHP代码,可以更改标签内的值。这是php代码
<?php
$doc = new DOMDocument();
$doc->load('local.xml');
$config = $doc->getElementsByTagName( "global" );
foreach( $config as $global )
{
$hosts=$global->getElementsByTagName( "host" );
$usernames=$global->getElementsByTagName( "username" );
$a = "<![CDATA[name456]]>";
$hosts1=$hosts->item(0)->nodeValue=$a;
}
$doc->save('local.xml');
?>
当我执行上面的代码时,xml文件中的输出将显示为
<?xml version="1.0" encoding="utf-8"?>
<config>
<global>
<host><![CDATA[name456]]></host>
<username><![CDATA[root45]]></username>
</global>
</config>
如何在xml文档中转换"<" to "<"
和">" to ">"
?
我已经尝试了$a = htmlspecialchars("<![CDATA[name456]]>");
以及$a = html_entity_decode("<![CDATA[name456]]>");
仍然提供了与上面相同的输出。
答案 0 :(得分:3)
答案 1 :(得分:0)
最后经过几个小时的小路和错误后,我设法解决了这个问题。如果Daniel Sloof没有显示提示,我的代码将毫无用处。谢谢Daniel Sloof
这是最终代码
<?php
$doc = new DOMDocument();
$doc->load('local.xml');
$config = $doc->getElementsByTagName( "global" );
foreach( $config as $global )
{
$hosts=$global->getElementsByTagName( "host" );
$oldcdata=$hosts->item(0)->nodeValue="";
$newcdata=$doc->createCDATASection("name456");
$hosts1=$hosts->item(0)->appendChild($newcdata);
}
$doc->save('local.xml');
?>
通过向$oldcdata
添加空值,它会清空<host><![CDATA[name123]]></host>
标记内的值,这将在xml文件中变为<host></host>
现在我们向$newcdata
添加一个新值,然后使用appendChild($ newcdata)将其附加到<host></host>
,它将变为<host><![CDATA[name456]]></host>