【问题标题】:Merging of xml files java合并xml文件java
【发布时间】:2011-08-11 16:31:17
【问题描述】:

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

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>

提前致谢....

【问题讨论】:

  • 这里还有更多的事情要做,而不仅仅是合并。第一个文件有三个空的&lt;person&gt; 元素,但输出只有一个。你如何决定保留什么和删除什么?此外,“不是 XSLT,因为 xmls 总是不相同”的说法也不太合理。您能否进一步解释为什么您认为 XSLT 不合适?
  • 如果您查看第一个 xml 有三个人员标签,第二个有两个人员标签...我所做的只是将第二个 xml 中的值填充到模板中第一个..我不愿意使用 XSLT,因为模板 xml(第一个)是在旅途中生成的,所以我没有可以自动生成 XSLT 的机制 ..
  • 即使您的输入发生变化,也不要认为您需要“自动生成”XSLT。您可以构建一个通用样式表,对不同的 XML 文件执行相同的操作。如果您只想按照评论中的说明合并空节点,则可以这样做。
  • 我不知道如何实现这一点...你能帮我吗...

标签: java xml dom xpath


【解决方案1】:

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

然后您可以从链接列表中调用标签名称,从哈希映射中附加标签值并将它们写出到一个新的 XML 文件中。 当我合并 XML 时,这是我使用的过程。 希望这会有所帮助

【讨论】:

  • 是的,我正在尝试一些类似的事情,但我无法让它工作......如果你能发布一些代码会很有帮助......
【解决方案2】:
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 文件。 希望这会有所帮助。

【讨论】:

    猜你喜欢
    • 2013-01-12
    • 2010-10-13
    • 1970-01-01
    • 1970-01-01
    • 2013-05-15
    • 2016-06-02
    • 1970-01-01
    • 2012-04-24
    • 1970-01-01
    相关资源
    最近更新 更多