如何将特殊字符传递给xml文件

时间:2012-08-11 02:25:12

标签: php simplexml

我正在编辑一个特定节点文件的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 numnber 
    $xml->asXML('demo.xml');
}

如何将字符串放在xml文件中

1 个答案:

答案 0 :(得分: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');