使用PHP DomDocument进行意外格式化


Unintended formatting using PHP DomDocument

我正试图使用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>

有什么想法吗?

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

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

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

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