java - 将 XML 文档插入到另一个 XML 文档上的特定节点 (java)

标签 java xml xmldocument appendchild

我有一个 XML1:

<letterContent>
    <key1>key1</key1>
    <key2>key2</key2>
    <type>456</type>
    <object1>789</object1>
    <effectiveDate>00</effectiveDate>
    <expandedData />
</letterContent>

...和 ​​XML 2:

<expandedData>
    <rsnForReg>
        <legacyTIN>
            <asCurrent>leg123</asCurrent>
        </legacyTIN>
        <etpmTIN>
            <asCurrent>etpm123</asCurrent>
        </etpmTIN>
        <regType>
            <asCurrent/>
        </regType>
    </rsnForReg>
</expandedData>

我想使用 JAVA 在 ExpandedData 节点上的 XML 1 文档中插入 XML 2。

最终的 XML1 应如下所示:

<letterContent>
    <key1>key1</key1>
    <key2>key2</key2>
    <type>456</type>
    <object1>789</object1>
    <effectiveDate>00</effectiveDate>
    <expandedData>
        <rsnForReg>
            <legacyTIN>
                <asCurrent>leg123</asCurrent>
            </legacyTIN>
            <etpmTIN>
                <asCurrent>etpm123</asCurrent>
            </etpmTIN>
            <regType>
                <asCurrent/>
            </regType>
        </rsnForReg>
    </expandedData>
</letterContent>

XML2 插入到 XML1 的 ExpandedData 节点上。有任何想法吗?我知道我需要构建一个递归函数来循环遍历 XML 2,但不确定如何在 java 中实现它。

最佳答案

考虑使用XPath :

import static javax.xml.xpath.XPathConstants.*;
import javax.xml.transform.TransformerFactory;
import javax.xml.transform.dom.DOMSource;
import javax.xml.transform.stream.StreamResult;
import javax.xml.xpath.*;
import org.w3c.dom.*;
import org.xml.sax.InputSource;

public class Xml2into1 {
  public static void main(String[] args) throws Exception {
    // read from files
    InputSource xml1 = new InputSource("xml1.xml");
    InputSource xml2 = new InputSource("xml2.xml");
    // find the node to add to
    XPath xpath = XPathFactory.newInstance()
        .newXPath();
    Node expandedData1 = (Node) xpath.evaluate("//expandedData", xml1, NODE);
    Document doc1 = expandedData1.getOwnerDocument();
    // insert the nodes
    Node expandedData2 = (Node) xpath.evaluate("//expandedData", xml2, NODE);
    expandedData1.getParentNode()
        .replaceChild(doc1.adoptNode(expandedData2), expandedData1);
    // print results
    TransformerFactory.newInstance()
        .newTransformer()
        .transform(new DOMSource(doc1), new StreamResult(System.out));
  }
}

关于java - 将 XML 文档插入到另一个 XML 文档上的特定节点 (java),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15269263/

相关文章:

c# - 我如何使用 XmlDocument.Save() 将 ="us-ascii"编码为数字字符实体而不是问号?

c# - 将 XML 文件读入 XmlDocument

Java 8 流 : difference between limit() and skip()

java - 无法创建类 org.apache.logging.log4j.core.impl.Log4jContextFactory

javascript - 我如何获取这个xml的值?

php - 在 php 中加载 xml 文件 - 缺少访问权限?

java - 这是聚合吗?

java - 找不到 Tomcat 7 setenv.sh

JaxB 生成的 XML 也有其他模式的命名空间

c# - XElement 获取所有子元素节点名称和值