从xml中提取节点的值

时间:2011-08-17 14:11:23

标签: java xml dom xml-parsing xmlnode

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

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

Actual.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,,,,

3 个答案:

答案 0 :(得分:2)

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

答案 1 :(得分:1)

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

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

  • here
  • here
  • 以及众多其他网站,文章和书籍

答案 2 :(得分:0)

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

湾递归遍历模板

℃。 (选项1)对于找到的每个元素构建一个xpath(使用堆栈和push / pop?)

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

℃。 (选项2)在模板的同时递归遍历实际。如果未找到该元素,则停止深入到模板中。