从xml中提取节点的值
Posted
技术标签:
【中文标题】从xml中提取节点的值【英文标题】:Extracting the value of nodes from xml 【发布时间】:2011-08-17 14:11:22 【问题描述】:我有两个不同的 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,,,,
【问题讨论】:
您有什么具体问题吗?向我们展示您迄今为止所做的工作以及遇到的问题。 我尝试使用 dom 解析这些 xml 文件,并为每个 xml 提供两个单独的文档,之后我不知道如何在实际 xml 中从模板 xml 中一一查看元素并获取值... @Naveen 你用什么来解析 xml? Jdom - jdom.org 简单易用。至于逐个获取元素,jdom会让你通过调用element.getChildren来获取元素列表。然后对于每个元素,您可以递归调用相同的方法。 【参考方案1】:首先,您应该为 XML 而不是模板定义一个模式。接下来,您可以创建一个 Person 的 java bean。这可以使用 JAXB 映射到每个人。这对我来说是过去 XML 解析最快的方法。 http://jaxb.java.net/
【讨论】:
【参考方案2】:这个例子很小,所以这可能还不是问题,但我会选择 SAX 而不是 DOM 来解析 XML 的内容。如果找到事件输出内容非常容易。
例如阅读 JAVA 中的 XML 处理:
here 和here 以及许多其他网站、文章和书籍【讨论】:
【参考方案3】:一个。将两个文档解析为 DOM
b.递归遍历模板
c。 (选项 1)为找到的每个元素构建一个 xpath(使用堆栈和推送/弹出?)
d。 (选项 1)在 actual.xml 上运行 xpath
c。 (选项2)与模板同时递归遍历actual。如果未找到该元素,则停止更深入地遍历模板。
【讨论】:
以上是关于从xml中提取节点的值的主要内容,如果未能解决你的问题,请参考以下文章
使用 VBscript 从节点和子节点的 XML 中提取数据