0

我有两个不同的 XML 文件,第一个是模板 xml,第二个是实际的 xml。模板 xml 仅包含实际 xml 包含模板 xml 中存在的一些元素的元素,如下面的 xml 文件所示。对于模板 xml 中存在的每个元素,我想查看实际的 xml 并查看该元素是否存在,如果存在,则提取其值并打印,否则只打印空白空间,如输出所示

模板.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>

实际.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>

预期产出

tom,26,main street,washington,mike,30,first street,dallas,,,,
4

3 回答 3

2

首先,您应该为 XML 而不是模板定义模式。接下来,您可以创建一个 Person 的 java bean。这可以使用 JAXB 映射到每个人。这对我来说是过去 XML 解析最快的方法。 http://jaxb.java.net/

于 2011-08-17T14:15:31.497 回答
1

这个例子很小,所以这可能不是问题(还),但我会选择 SAX 而不是 DOM 来解析 XML 的内容。如果找到,很容易让事件输出内容。

阅读 JAVA 中的 XML 处理,例如:

  • 这里
  • 这里
  • 以及许多其他网站、文章和书籍
于 2011-08-17T14:43:21.737 回答
0

一个。将两个文档解析为 DOM

湾。递归遍历模板

C。(选项1)为每个找到的元素建立一个xpath(使用堆栈和push/pop?)

d。(选项 1)在 actual.xml 上运行 xpath

C。(选项2)与模板同时递归遍历actual。如果未找到该元素,则停止更深入地遍历模板。

于 2011-08-17T14:21:26.363 回答