使用PHP <! - [CDATA [...]] - >解析xml文档

时间:2012-09-06 13:45:52

标签: php xml dom

我知道这个问题之前已被多次询问,但仍无法找到我一直在寻找使用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>&lt;![CDATA[name456]]&gt;</host>
        <username><![CDATA[root45]]></username> 
    </global>
</config>

如何在xml文档中转换"&lt;" to "<""&gt;" to ">"

我已经尝试了$a = htmlspecialchars("<![CDATA[name456]]>");以及$a = html_entity_decode("<![CDATA[name456]]>");仍然提供了与上面相同的输出。

2 个答案:

答案 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>