Thi*_*its 8 php xml simplexml domdocument
我正在使用simpleXML在我的一个XML文档中添加子节点...当我在simpleXML对象上执行print_r时,<仍然<在视图源中显示为a .但是,在使用DOMDocument将此对象保存回XML后,将<转换为<并>转换为>
关于如何改变这种行为的任何想法?我试过添加dom->substituteEntities = false;,但这没有用.
//Convert SimpleXML element to DOM and save
$dom = new DOMDocument('1.0');
$dom->preserveWhiteSpace = false;
$dom->formatOutput = false;
$dom->substituteEntities = false;
$dom->loadXML($xml->asXML());
$dom->save($filename);
Run Code Online (Sandbox Code Playgroud)
这是我正在使用<:
$new_hint = '<![CDATA[' . $value[0] . ']]>';
$PrintQuestion->content->multichoice->feedback->hint->Passage->Paragraph->addChild('TextFragment', $new_hint);
Run Code Online (Sandbox Code Playgroud)
问题是,我使用简单的XML来迭代XML文档中的某些节点,如果属性与给定的ID匹配,则会添加一个特定的子节点和CDATA.然后在所有处理之后,我使用DOMDocument将XML保存回文件,这是<转换为<等的地方.
这是我的整个类文件的链接,因此您可以更好地了解我正在尝试完成的任务.具体请参考底部的hint_insert()方法.
Vol*_*erK 10
SimpleXML和php5的DOM模块使用相同的文档内部表示(由libxml提供).您可以在两个apis之间切换,而无需通过simplexml_import_dom()和dom_import_simplexml()重新解析文档.
即如果你真的想要/必须使用SimpleXML api执行迭代,一旦找到了你的元素,你就可以切换到DOM api并在同一文档中创建CData部分.
<?php
$doc = new SimpleXMLElement('<a>
<b id="id1">a</b>
<b id="id2">b</b>
<b id="id3">c</b>
</a>');
foreach( $doc->xpath('b[@id="id2"]') as $b ) {
$b = dom_import_simplexml($b);
$cdata = $b->ownerDocument->createCDataSection('0<>1');
$b->appendChild($cdata);
unset($b);
}
echo $doc->asxml();
Run Code Online (Sandbox Code Playgroud)
版画
<?xml version="1.0"?>
<a>
<b id="id1">a</b>
<b id="id2">b<![CDATA[0<>1]]></b>
<b id="id3">c</b>
</a>
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
6074 次 |
| 最近记录: |