Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何将`org.w3c.dom.Node`转换为`org.w3c.dom.Comment`_Java_Xml_Dom - Fatal编程技术网

Java 如何将`org.w3c.dom.Node`转换为`org.w3c.dom.Comment`

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>

在一个应用程序中,我将XML读入
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元素。但我认为这会非常笨拙。

您不能直接将某些元素包装到注释中。我认为您应该按照以下方式进行处理:

  • 在字符串中序列化必须删除的元素
  • 插入带有字符串“获取为数据”的注释
  • 可以通过这种方式实现,假设您的XML以前已加载到
    文档
    变量中(作为
    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>