为什么Document.adoptNode(节点)创建的Node不包含属性值?

时间:2013-12-05 14:10:08

标签: java xml-parsing

我有一个xml XML1,如

<a>
  <b>
    <c></c>
    <c someAttrib="hi"></c>
  <b>
<a>

和另一个XML 2,如

  <b>
    <c someAttrib="hello"></c>
  <b>

如果我这样做

 DocumentBuilder builder = factory.newDocumentBuilder();  
    InputStream a=new ByteArrayInputStream(XML1.getBytes());
        InputStream b=new ByteArrayInputStream(XML2.getBytes());
        Document doc1 = builder.parse(a);
        doc1.getDocumentElement().normalize ();
        Document doc2 = builder.parse(b);
        doc2.getDocumentElement().normalize ();

        XPathFactory xPathfactory = XPathFactory.newInstance();
        XPath xpath = xPathfactory.newXPath();

        XPathExpression expr = xpath.compile("a/b");

        NodeList qa=(NodeList)expr.evaluate(doc1,XPathConstants.NODESET);
        Node oldConfigurationNode=qa.item(0);

         doc1.createAttribute("operation");
         doc2.getFirstChild().getAttributes().item(0);
         Node newConfigurationNode=doc1.adoptNode(doc2.getFirstChild());

         oldConfigurationNode.getParentNode().replaceChild(newConfigurationNode, ConfigurationNode);

        StringWriter sw = new StringWriter(); 
            Transformer serializer = TransformerFactory.newInstance().newTransformer(); 
            serializer.transform(new DOMSource(doc1.getFirstChild()), new StreamResult(sw));
           System.out.println(sw.toString());

我得到的输出是

 <a>
   <b>
     <c att=""/>
   </b>
 </a>  

采用节点方法实际上做了什么,我在不同的场景中得到了不同的结果。

为什么会出现这种情况?请解释一下..谢谢你

1 个答案:

答案 0 :(得分:0)

documentation of adoptNode中,您可以看到:

  

ELEMENT_NODE   采用源元素的指定属性节点。 默认属性被丢弃,但如果采用的文档定义了此元素名称的默认属性,则会分配这些属性。

如果您想保留原始值,可以使用importNode方法,并将参数 deep 设置为true。