【问题标题】:Extracting the value of nodes from xml从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来获取元素列表。然后对于每个元素,您可以递归调用相同的方法。

标签: java xml dom xml-parsing xmlnode


【解决方案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。如果未找到该元素,则停止更深入地遍历模板。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-08-06
        • 2019-04-27
        • 2018-07-30
        • 1970-01-01
        • 2015-05-23
        • 2015-03-19
        相关资源
        最近更新 更多