2013-03-07 96 views
1

我有一个XML1:插入XML文档(JAVA)的另一个XML文档的特定节点

<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> 

我想插入XML 2使用JAVA在expandedData节点上创建XML 1文档。

最终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中实现它。

+0

[克隆dom.Document对象(http://stackoverflow.com/questions/5226852/cloning-dom-document-object) – hakre 2013-03-07 11:30:24

回答

1

考虑使用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)); 
    } 
} 
+0

感谢的可能重复!这似乎工作得很好 – LeoBron 2013-03-11 12:35:52

相关问题