0

我知道这个问题以前被问过很多次,但仍然找不到我一直在寻找使用 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]]>");但它仍然提供与上面相同的输出。

4

2 回答 2

3

使用DOMDocument::createCDATASection

于 2012-09-06T13:48:45.713 回答
0

最后经过几个小时的跟踪和错误,我设法解决了它。如果 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>标签内的值,这将<host></host>在 xml 文件中变为

$newcdata现在我们向它添加一个新值,然后<host></host>使用 appendChild($newcdata) 将其追加,它将变为<host><![CDATA[name456]]></host>

于 2012-09-07T11:08:51.343 回答