如何让PHP implexml将<保存为自身,而不是<

2022-04-13 00:00:00 xml php simplexml
基本上,我有一个在不同位置更新XML文档的脚本...但是,我需要CDATA格式的文本...所以我尝试了一下:

                $PrintQuestion->content->multichoice->feedback->hint->Passage->Paragraph->addChild('TextFragment', '<![CDATA[' . $value[0] . ']]>');

遗憾的是,当我将XML保存回文件时,CDATA中的<;和>出现为它们各自的<;和$gt;代码,有没有办法避免这种情况?

注意:我们的解析器不知道如何读取&lt;&gt;代码,因此这是一个严重的问题

执行Simple_XML对象的print_r后,<;在源代码中显示为其本身!

必须是域保存将其转换为实体代码...您知道如何禁用此功能吗?

        //Convert SimpleXML element to DOM and save
        $dom = new DOMDocument('1.0');
        $dom->preserveWhiteSpace = false;
        $dom->formatOutput = false;
        $dom->loadXML($xml->asXML());
        $dom->save($filename);

解决方案

正如我在评论中所说,SimpleXML对DOM节点的控制非常有限。以下是有关如何将DOMText节点替换为DOMCDATASection节点的示例。

$dom = new DOMDocument;
$dom->loadXML('<root><a>foo</a></root>');
$a = $dom->documentElement->childNodes->item(0);
$a->replaceChild(
    $dom->createCDATASection('bar'),
    $a->childNodes->item(0)
);
echo $dom->saveXml($a); // <a><![CDATA[bar]]></a>

有关如何使用DOMsee my answer here和some more here的详细示例

相关文章