我有一个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>
采用节点方法实际上做了什么,我在不同的场景中得到了不同的结果。
为什么会出现这种情况?请解释一下..谢谢你
答案 0 :(得分:0)
在documentation of adoptNode中,您可以看到:
ELEMENT_NODE 采用源元素的指定属性节点。 默认属性被丢弃,但如果采用的文档定义了此元素名称的默认属性,则会分配这些属性。
如果您想保留原始值,可以使用importNode方法,并将参数 deep 设置为true。