基本上我有一个脚本可以在不同的地方更新xml文档......但是,我需要将文本放在CDATA中......所以我尝试了这个:
$PrintQuestion->content->multichoice->feedback->hint->Passage->Paragraph->addChild('TextFragment', '<![CDATA[' . $value[0] . ']]>');
不幸的是,当我将XML保存回文件时,&lt;和&gt;在cdata中出现了各自的&lt;和$ gt;代码是否有办法避免这种情况?
注意:我们的解析器不知道如何阅读<
和>
代码,因此这是一个严重的问题
在执行simple_xml对象的print_r之后,&lt;在源代码中显示为自己!
必须将domsave转换为实体代码...任何想法如何禁用它?
//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);
答案 0 :(得分:3)
就像我在评论中所说的那样,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>
有关如何使用DOM see my answer here和some more here
的详细示例答案 1 :(得分:1)
在将它发送给解析器之前,你不能使用html_entity_decode
函数吗?它会将<
和>
转换回<
和>
答案 2 :(得分:1)
解析器无法处理CDATA部分?在这种情况下,它不是XML解析器,因此您需要编写一个生成类似XML的输出而不是XML工具的工具。 (或修复解析器,使其成为XML解析器)