我有一个 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/