我正在使用SimpleXML构建文档,想知道是否可以像这样向文档中插入注释标签:
<root>
<!-- some comment -->
<value>
</root>
编辑:
这个评论在文档的中间位置。
<root>
<tag1 />
<!-- some comment -->
<value />
</root>
很不幸,SimpleXML无法处理注释。正如提到的那样,DOM可以处理注释,但与SimpleXML相比,在处理简单内容时使用起来有些麻烦。
我的建议:尝试SimpleDOM。它是SimpleXML的扩展,所以一切都一样,并且它有许多有用的方法来处理DOM内容。
例如,insertComment($content, $mode)
可以在给定节点之前或之后“附加”或插入注释。例如:
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();
...将会回显
<?xml version="1.0"?>
<root>
<!-- mode: before -->
<value>
<!-- mode: append -->
</value>
<!-- mode: after -->
</root>
不可以,但显然你可以使用DomDocument作为解决方法(德语):链接
$oNodeOld = dom_import_simplexml($oParent);
$oDom = new DOMDocument();
$oDataNode = $oDom->appendChild($oDom->createElement($sName));
$oDataNode->appendChild($oDom->createComment($sValue));
$oNodeTarget = $oNodeOld->ownerDocument->importNode($oDataNode, true);
$oNodeOld->appendChild($oNodeTarget);
return simplexml_import_dom($oNodeTarget);
但是,为什么不直接使用DOM呢?
实际上有一个不太光彩的技巧,基于这样一个事实:addChild
没有检查元素名称是否有效:
$root->addChild('!-- Your comment --><dummy');
$root->asXML()
时,您会得到这样一个字符串:<root><!-- Your comment --><dummy/></root>
<dummy>
元素,但这是需要付出的代价。不要尝试添加值,这只会搞乱一切。只在使用asXML()
的情况下使用。!
前面缺少 <
)? - beroe< />
中,这就提供了“缺失”的方括号。确实是个小技巧 :^) - beroe$comment = $dom->createComment("My Comment"); $dom->appendChild($comment);
。 - beroe$xml = new SimpleXMLElement('<root/>');
$xml->element->comment->sample = 12;
$xml_str = $xml->asXML();
$xml_str = str_replace(['<comment>', '</comment>'], ['<!--', '-->'], $xml_str)
echo $xml_str;
<root> <!-- <sample>12</sample> --> </root>
$CommentNode = $xml->createComment("some comment");
$root->appendChild($CommentNode);
DOMDocument
对象的。然而,这与明确要求关于 SimpleXML 对象的问题无关。 - lubosdz