2

特定のノードファイルを保存した後でxmlファイルを編集しています が、コードの行番号7のために特殊文字が含まれています

$xml = simplexml_load_file('demo.xml');
$i=2;

foreach($xml->Page as $myPage){
if($myPage['id']==$i) {
    $da = "data";
    $text = "helloworld";
    $myPage->$da ="<![CDATA[{$text}]]>"; //line number 
    $xml->asXML('demo.xml');
}

文字列をそのままxmlファイルに入れるにはどうすればよいですか?

4

1 に答える 1

1

SimpleXML は CDATA をうまく処理できません。CDATA を書きたい場合は、DOMオブジェクトを使用する必要があります。例えば:

$xml = new DOMDocument();
$xml->load('demo.xml');
$i = 2;

foreach ($xml->getElementsByTagName('Page') as $page) {
    if ($page->attributes->getNamedItem('id')->value == $i) {
        $da = 'data';
        $text = 'helloworld';

        $data = $xml->createElement($da);
        $data->appendChild($xml->createCDATASection($text));

        $page->appendChild($data);
    }
}

SimpleXML を引き続き使用する場合は、CDATA を書き込みたい要素だけを DOM オブジェクトとしてロードできます。

$xml = simplexml_load_file('demo.xml');
$i = 2;

foreach ($xml->Page as $page) {
    if ($page['id'] == $i) {
        $da = 'data';
        $text = 'helloworld';
        $page->$da = '';

        $node = dom_import_simplexml($page->$da);
        $dom = $node->ownerDocument;
        $node->appendChild($dom->createCDATASection($text));
    }
}

$xml->asXML('demo.xml');
于 2012-08-23T10:42:51.677 に答える