gpt4 book ai didi

java - 为什么 Document.adoptNode(node) 创建的 Node 不包含属性值?

转载 作者:太空宇宙 更新时间:2023-11-04 07:12:48 25 4
gpt4 key购买 nike

我有一个类似于 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>

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

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

最佳答案

documentation of adoptNode你可以看到:

ELEMENT_NODE Specified attribute nodes of the source element are adopted. Default attributes are discarded, though if the document being adopted into defines default attributes for this element name, those are assigned.

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

关于java - 为什么 Document.adoptNode(node) 创建的 Node 不包含属性值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20402193/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com