Php 是否可以使用simplexml将注释标记插入xml?

Php 是否可以使用simplexml将注释标记插入xml?,php,xml,simplexml,Php,Xml,Simplexml,我正在使用SimpleXML构建一个文档,并想知道是否可以像这样在文档中插入注释标记: <root> <!-- some comment --> <value> </root> <root><!-- Your comment --><dummy/></root> 编辑: 注释是文档中间的某个地方。 <root> <tag1 /> <!-- some

我正在使用SimpleXML构建一个文档,并想知道是否可以像这样在文档中插入注释标记:

<root>
  <!-- some comment -->
  <value>
</root>
<root><!-- Your comment --><dummy/></root>

编辑

注释是文档中间的某个地方。

<root>
  <tag1 />
  <!-- some comment -->
  <value />
</root>

没有,但显然你可以:


但是,为什么不直接使用DOM呢?

不幸的是,SimpleXML不处理注释。正如前面提到的,DOM确实可以处理注释,但与SimpleXML相比,对于简单的东西来说,使用DOM有点麻烦

我的建议是:试试看。它是SimpleXML的一个扩展,所以一切都是一样的,它有很多有用的方法来处理DOM

例如,
insertComment($content,$mode)
可以
append
在给定节点之前或之后插入注释
。例如:

include 'SimpleDOM.php';

$root = simpledom_load_string('<root><value/></root>');

$root->value->insertComment(' mode: append ', 'append');
$root->value->insertComment(' mode: before ', 'before');
$root->value->insertComment(' mode: after ', 'after');

echo $root->asPrettyXML();
包括“SimpleDOM.php”;
$root=simpledom\u load\u字符串(“”);
$root->value->insertComment('mode:append','append');
$root->value->insertComment('mode:before','before');
$root->value->insertComment('mode:after','after');
echo$root->asPrettyXML();
…将产生共鸣

<?xml version="1.0"?>
<root>
  <!-- mode: before -->
  <value>
    <!-- mode: append -->
  </value>
  <!-- mode: after -->
</root>

实际上有一个肮脏的把戏,因为
addChild
没有检查元素名是否有效:

$root->addChild('!-- Your comment --><dummy');
您可能会注意到它也生成了一个空的
元素,但这是要付出的代价。不要试图增加价值,这只会把一切搞砸。仅与
asXML()
结合使用


我说过这是个卑鄙的把戏我不建议在生产中使用此功能,但仅用于调试/测试目的。

这里有一个快速简便的解决方案:

$xml=新的SimpleXMLElement(“”);
$xml->element->comment->sample=12;
$xml_str=$xml->asXML();
$xml\u str=str\u replace(['',['',['',$xml\u str)
echo$xml_str;



谢谢,Josh,我可能会觉得这也很有用。以前没听说过这个库。你的第一个命令中是否有输入错误(缺少
@beroe不,它就是这样。试试看。好吧,酷。我现在看到它被包装在
中,它提供了“缺少”的括号。真是个肮脏的把戏:^)出于我的目的,我最终只使用了无聊的解决方案
$comment=$dom->createComment(“我的评论”)$dom->appendChild($comment)
<root><!-- Your comment --><dummy/></root>
<root> <!-- <sample>12</sample> --> </root>