使用PHP DomDocument进行意外格式化

时间:2013-11-21 00:44:11

标签: php domdocument cdata

我正在尝试使用PHP的DomDocument类在XML文档中包含格式化元素。

我写了以下函数:

function awstAddFormattedElement ($mySessionParams, $parentElement, $elementName, $elementValue) {
    $xmlDoc = $mySessionParams['xmlDoc'];

    $element = $xmlDoc->createElement($elementName,$elementValue);
    $element = $parentElement->appendChild($element);

    $myessionParams['element'] = $element;
    return $mySessionParams;
}

问题在于,当我调用它时,$ elementValue中的实体会自动编码,而我正在调用的服务会拒绝它。

$elementValue = '<![CDATA['.
                    '<p>blah, blah, blah.</p>'.
                ']]>';

所以,当我这样做时:

awstAddFormattedElement ($mySessionParams, $parentElement, 'FormattedContent', $elementValue)

我希望在生成的XML中看到类似的内容:

<FormattedContent><![CDATA[<p>blah, blah, blah.</p>]]></FormattedContent>   

相反,我得到以下内容:

<FormattedContent>&lt;![CDATA[&lt;p&gt;blah, blah, blah.&lt;/p&gt;]]&gt;</FormattedContent>

有什么想法吗?

1 个答案:

答案 0 :(得分:1)

对于CDATA部分,您必须使用DOMDocument::createCDATASection,例如

$element = $xmlDoc->createElement($elementName);
$element->appendChild($xmlDoc->createCDATASection($elementValue));

$parentElement->appendChild($element);

您的$elementValue参数应该只包含原始字符串,例如

$elementValue = '<p>blah, blah, blah.</p>';