0

私はこの質問が以前に何度も尋ねられることを知っていますが、それでも私が探していた望ましい結果を見つけることができません。phpDOMDocument関数を使用して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');
?>

null 値を追加すると、タグ$oldcdata内の値が空になり、xml ファイルになります。<host><![CDATA[name123]]></host><host></host>

新しい値を追加すると、appendChild($newcdata) を使用して$newcdata追加され、次のようになります。<host></host><host><![CDATA[name456]]></host>

于 2012-09-07T11:08:51.343 に答える