合并xml文件java

时间:2011-08-11 16:31:17

标签: java xml dom xpath

我有两个不同的xml文件,如下所示,想要合并这些xml文件并获得预期的输出可能是使用xpath或dom解析而不是XSLT,因为xmls总是不一样

XML1.xml

<personinfo>
   <person>
     <name><name>
     <age></age>
     <address>
     <street></street>
     <city></city>
     <address>
   </person>
   <person>
     <name><name>
     <age></age>
     <address>
     <street></street>
     <city></city>
     <address>
   </person>
   <person>
     <name><name>
     <age></age>
     <address>
     <street></street>
     <city></city>
     <address>
   </person>
</personinfo>

XML2.xml

<personinfo>
   <person>
     <name>tom<name>
     <age>26</age>
     <address>
     <street>main street</street>
     <city>washington</city>
     <address>
   </person>
   <person>
     <name>mike<name>
     <age>30</age>
     <address>
     <street>first street</street>
     <city>dallas</city>
     <address>
   </person>
</personinfo>

Expected.xml

<personinfo>
   <person>
     <name>tom<name>
     <age>26</age>
     <address>
     <street>main street</street>
     <city>washington</city>
     <address>
   </person>
   <person>
     <name>mike<name>
     <age>30</age>
     <address>
     <street>first street</street>
     <city>dallas</city>
     <address>
   </person>
   <person>
     <name><name>
     <age></age>
     <address>
     <street></street>
     <city></city>
     <address>
   </person>
</personinfo>

提前致谢....

2 个答案:

答案 0 :(得分:0)

如果您可以灵活地创建新的xml文件,则可以使用您熟悉的任何解析器来解析每个文件。将标记存储在String LinkedLists的LinkedList中,并将标记值存储在以下类型的HashMap中: LinkedHashMap data = new LinkedHashMap();

然后,您可以从链接列表中调用标记名称,附加哈希映射中的标记值并将其写入新的XML文件。 当我合并XML时,这就是我使用的程序。 希望这有帮助

答案 1 :(得分:0)

DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
DocumentBuilder db = dbf.newDocumentBuilder();
Document doc = db.parse(file);
doc.getDocumentElement().normalize();
NodeList nodeLst = doc.getElementsByTagName("employee");
for (int s = 0; s < nodeLst.getLength(); s++) 
{
stkey=getXMLData(s,nodeLst,"id");
     keylist.add(stkey);// adding integer keys to a Linked List
data.put(stkey, stkey);                 
data.put(stkey+"first",getXMLData(s,nodeLst,"firstname"));                  
data.put(stkey+"last",getXMLData(s,nodeLst,"lastname"));                    
     data.put(stkey+"loc",getXMLData(s,nodeLst,"location"));    
     data.put(stkey+"occ",getXMLData(s,nodeLst,"occupation"));

}

这将获取哈希映射中的标记值和链接列表中的标记名称。为了使您的工作更轻松,您可以将标记类型附加到hashmap键。例如:如果我的密钥是员工ID(在我的情况下),我会向其添加“first”。假设有人有一个id:10001.他的数据将存储为:10001,然后是10001first,10001last,10001loc,10001occ。现在,您可以调用每个hashmap键,根据附加的标记名称获取元素并连接到您的xml文件。 希望这会有所帮助。