在dom xml元素中获取cdata(html)

时间:2011-08-12 12:38:07

标签: php xml dom

我正在创建一个带有DOM的XML文档,并从我需要放入元素的数据库中获取像ä和å这样的HTML有趣字符。但我真的无法让它发挥作用。

在元素中添加CDATA HTML的正确方法是什么,这样我的输出就像这样:

<TRANSLATIONS>
    <DENMARK>
        <ERRORADDRESSLINE1REQUIRED><![CDATA[&auml; &aring;]]></ERRORADDRESSLINE1REQUIRED>
    </DENMARK>
</TRANSLATIONS>

使用:

$sData = "<![CDATA[" . $value . "]]>";
$objLabel = $objXmlDoc->createElement($label, $sData);

并没有真正做到这一点 并附加$objXmlDoc->createCDATASection($value)会在另一个标签旁边创建一个元素,而不是在标签内。

我忽略了什么?

1 个答案:

答案 0 :(得分:4)

您必须将CDATA部分附加到您想要的元素:

$dom = new DOMDocument('1.0', 'utf-8');
$dom->appendChild($dom->createElement('translations'))
        ->appendChild($dom->createElement('denmark'))
            ->appendChild($dom->createElement('error'))
                ->appendChild($dom->createCDataSection('&auml; &aring;'));

$dom->formatOutput = true;
echo $dom->saveXml();

输出:

<?xml version="1.0" encoding="utf-8"?>
<translations>
  <denmark>
    <error><![CDATA[&auml; &aring;]]></error>
  </denmark>
</translations>

但是当您使用UTF-8时,不需要将ä和å放入CDATA部分:

$dom = new DOMDocument('1.0', 'utf-8');
$dom->appendChild($dom->createElement('translations'))
        ->appendChild($dom->createElement('denmark'))
            ->appendChild($dom->createElement('error', 'ä and å'));

$dom->formatOutput = true;
echo $dom->saveXml();

输出完全有效:

<?xml version="1.0" encoding="utf-8"?>
<translations>
  <denmark>
    <error>ä and å</error>
  </denmark>
</translations>