Java 如何将`org.w3c.dom.Node`转换为`org.w3c.dom.Comment`
在一个应用程序中,我将XML读入Java 如何将`org.w3c.dom.Node`转换为`org.w3c.dom.Comment`,java,xml,dom,Java,Xml,Dom,在一个应用程序中,我将XML读入org.w3c.dom.Document。然后,我正在搜索要删除的特定节点 <list> <item id="1" /> <item id="2" bad="true"> <item id="2.1" /> </item> <item id="3" /> </list> 但我更愿意将完整节点及其子结构添加到注释中,以避免丢失信息 <list>
org.w3c.dom.Document
。然后,我正在搜索要删除的特定节点
<list>
<item id="1" />
<item id="2" bad="true">
<item id="2.1" />
</item>
<item id="3" />
</list>
但我更愿意将完整节点及其子结构添加到注释中,以避免丢失信息
<list>
<item id="1" />
<!--
<item id="2" bad="true">
<item id="2.1" />
</item>
-->
<item id="3" />
</list>
是否有任何优雅的方式将节点转换为注释,并在稍后将注释转换回节点
目前我能想到的唯一方法是使用
javax.xml.transform.Transformer
将节点转换为字符串,并将该字符串放入comment元素。但我认为这会非常笨拙。您不能直接将某些元素包装到注释中。我认为您应该按照以下方式进行处理:
文档
变量中(作为org.w3c.dom.document
对象):
Node e=document.getDocumentElement().getFirstChild();
//final DOMSerializerImpl ds=新的DOMSerializerImpl();
最终DominImplementals ls=(DominImplementals)文件
.getImplementation().getFeature(“LS”,“3.0”);
final LSSerializer ser=ls.createLSSerializer();
ser.getDomConfig().setParameter(“xml声明”,false);
做{
if(e.getNodeType()==Node.ELEMENT\u Node){
最终元素el=(元素)e;
if(“true”).equals(el.getAttribute(“bad”)){
//System.out.println(“坏!!”);
最终字符串sTextReplace=ser.writeToString(el);
el.getParentNode().replaceChild(
document.createComment(sTextReplace),el);
}
e=e.getNextSibling();
}
}而(e!=null);
document.getDocumentElement().normalize();
System.out.println(ser.writeToString(document));
此输出的结果是:
关于序列化,我从中获取了一些资料
注意:如果要注释的元素还包含一些注释,请小心。。。评论不能嵌套。我本来希望有更优雅的东西,但也许这就是它。所以我现在接受这个答案。
<list>
<item id="1" />
<!--
<item id="2" bad="true">
<item id="2.1" />
</item>
-->
<item id="3" />
</list>