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