本文介绍了如何让PHP implexml将<;保存为自身,而不是&;lt;的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
基本上,我有一个在不同位置更新XML文档的脚本...但是,我需要CDATA格式的文本...所以我尝试了一下: $PrintQuestion->content->multichoice->feedback->hint->Passage->Paragraph->addChild('TextFragment', '<![CDATA[' . $value[0] . ']]>');
遗憾的是,当我将XML保存回文件时,CDATA中的<;和>出现为它们各自的<;和$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的详细示例
这篇关于如何让PHP implexml将<;保存为自身,而不是&;lt;的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!