Php 如何防止文档保存<;as&;书信电报

Php 如何防止文档保存<;as&;书信电报,php,xml,simplexml,domdocument,Php,Xml,Simplexml,Domdocument,我正在使用simpleXML在我的一个XML文档中添加一个子节点。。。当我在simpleXML对象上打印时,content->multichoice->feedback->hint->Passage->paragration->addChild('TextFragment',$new\u hint); 问题是,我正在使用简单的XML迭代XML文档中的某些节点,如果某个属性与给定的ID匹配,则会使用CDATA添加特定的子节点。然后,在所有的处理之后,我使用DOMDocument将XML保存回文件

我正在使用simpleXML在我的一个XML文档中添加一个子节点。。。当我在simpleXML对象上打印时,
content->multichoice->feedback->hint->Passage->paragration->addChild('TextFragment',$new\u hint);
问题是,我正在使用简单的XML迭代XML文档中的某些节点,如果某个属性与给定的ID匹配,则会使用CDATA添加特定的子节点。然后,在所有的处理之后,我使用DOMDocument将XML保存回文件,在这里,<被转换为<,等等

这里有一个指向我整个类文件的链接,这样你就可以更好地了解我要完成的任务。具体请参阅底部的hint_insert()方法


问题在于,您可能将其添加为字符串,而不是元素

因此,不是:

$simple->addChild('foo', '<something/>');
不能让文本
和php5使用相同的文档内部表示形式(由提供)。您可以通过simplexml\u import\u dom()和在两个API之间切换,而无需重新解析文档。
也就是说,如果您真的希望/必须在找到元素后使用SimpleXML api执行迭代,那么您可以切换到DOM api并在同一文档中执行迭代

<?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();
xpath('b[@id=“id2”]”作为$b){
$b=dom\u import\u simplexml($b);
$cdata=$b->ownerDocument->CreateCataSection('01');
$b->appendChild($cdata);
未结算(b美元);
}
echo$doc->asxml();
印刷品

<?xml version="1.0"?>
<a>
  <b id="id1">a</b>
  <b id="id2">b<![CDATA[0<>1]]></b>
  <b id="id3">c</b>
</a>

A.
b1]]>
C

我正在尝试添加一个CDATA标记。。。查看原始帖子以获取更新的代码谢谢投票否决!当节点中有“”时,xml中的CDATA标记是必需的(除非转义)!和XHTML一样…嗯,我没有给你投票否决这个问题有什么不同?是CDATA标记的开始和结束让我产生了问题。。。请参考原始帖子。这也是正确的答案,只是当时不理解。不过还是投了赞成票,谢谢。这就是我需要的信息。我没有意识到我可以两者交替使用。设置$b=dom\u import\u simplexml($b)会弄乱迭代吗?“设置$b=…会弄乱迭代吗?”-显然不会;-)但是,如果您愿意,可以使用另一个变量。我只是希望变量尽可能少(在合理范围内,例如$cdata也可以省略),因为$b没有其他用途,所以我重新使用了它。
$child = $simple->addChild('foo');
$child->addChild('something');
$child = $dom->createCDataSection('your < cdata > body ');
$dom->appendChild($child);
$child = $PrintQuestion.....->addChild('TextFragment');
$domNode = dom_import_simplexml($child);
$cdata = $domNode->ownerDocument->createCDataSection($value[0]); 
$domNode->appendChild($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();
<?xml version="1.0"?>
<a>
  <b id="id1">a</b>
  <b id="id2">b<![CDATA[0<>1]]></b>
  <b id="id3">c</b>
</a>