【问题标题】:How to map xml file content to Java object如何将xml文件内容映射到Java对象
【发布时间】:2016-06-20 10:50:37
【问题描述】:

我正在处理需要将 xml 文件映射到基于 java 的对象的项目。

我搜索了一下,发现 JAXB 是用于将 XML-Java 映射回 XML 的标准库。

我正在开发部署了许多 XML 格式的数据源文件的应用程序。我想在运行时从这个 XML 文件中找出某些属性。下面给出了一个这样的 XML 文件示例:

<?xml version="1.0" encoding="UTF-8"?>
<datasources xmlns="http://www.jboss.org/ironjacamar/schema"  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
xsi:schemaLocation="http://www.jboss.org/ironjacamar/schema http://docs.jboss.org/ironjacamar/schema/datasources_1_0.xsd">
<datasource jndi-name="java:jboss/datasources/FDMS_DemoDS" pool-name="FDMS_DemoDS">
      <connection-url>jdbc:mysql://localhost:3306/demo?zeroDateTimeBehavior=convertToNull</connection-url>
      <driver>com.mysql</driver>
      <pool>
          <max-pool-size>60</max-pool-size>
      </pool>
      <security>
          <user-name>fduser</user-name>
          <password>fdms!</password>
      </security>
  </datasource>
</datasources>

现在我想使用 Java 从上面的 XML 文件中获取 ma​​x-pool-sizeconnection-url。我尝试使用 JAXB,但不幸的是我遇到了一些问题。

谁能帮我将这些 XML 映射到 Java 对象?

【问题讨论】:

  • 您可以使用简单的 xml 解析器,如 JAXP、STAX 来获取这些值,而不是使用 JAXB
  • @Sanjeev 感谢您的快速回复。我只是不想检索值,但还需要将其映射到 Java 对象并进一步使用该对象。
  • JAXB 是要走的路,或者如果你愿意,你也可以使用 xmlbeans。在这两种情况下,您都需要提出一个可以解释您的问题的工作示例。目前您的问题是开放式的。
  • I tried using JAXB but unfortuantely I am facing some issues. - 有什么问题?
  • unexpected element (uri:"http://www.jboss.org/ironjacamar/schema", local:"datasources"). Expected elements are &lt;{}datasources&gt; 等问题即将出现

标签: java xml dom jaxb saxparser


【解决方案1】:

在您的情况下,最简单的方法是下载XSD 文件并使用xjc 为您生成java 类。

  1. 下载http://docs.jboss.org/ironjacamar/schema/datasources_1_0.xsd
  2. 启动xjc datasources_1_0.xsd

更多关于 xjc 的信息,绑定编译器 here

【讨论】:

    【解决方案2】:

    如果您只想在 Java 中读取 xml 文件,还有很多选择。 我个人更喜欢普通的蒸煮器。它简单易用。

    https://commons.apache.org/proper/commons-digester/

    就个人而言,如果您需要做的只是读取文件,我觉得 JAXB 有点矫枉过正。请注意,digester 无法将 xml 文件写回。如果您需要写回 XML,请不要使用它。

    【讨论】:

    • 我只想读取 XML 文件而不是其他内容并将其映射到 java 文件。
    • 消化器就是为此而构建的。请通读文档。它将允许您将其映射到您选择的文件。
    【解决方案3】:

    xpath/jxpath 是最适合您的情况的选项。

    【讨论】:

      猜你喜欢
      • 2012-03-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-09-10
      相关资源
      最近更新 更多