【问题标题】:java class representation of xml [duplicate]xml的java类表示[重复]
【发布时间】:2023-03-08 17:25:01
【问题描述】:

可能重复:
What is the best/simplest way to read in an XML file in Java application?

我有一个这样的 xml:

<Root>
   <Commodity>
       <Which name="Book" />
       <Book name="harley" price="5" />
       <Book name="Marley" price="8" />
       <Book name="hampi" price="10" />
   </Commodity>
   <Item>
      <Commodity>
         <Which name="fiction" />
         <Book name="harley" price="5" />
         <Book name="Marley" price="8" />
         <Book name="hampi" price="10" />
      </Commodity>
      <Item>
         <Commodity>
            <Which name="thriller" />
            <Book name="hjhj" price="5" />
            <Book name="ccvcv" price="8" />
            <Book name="vcvnnn" price="10"/>
         </Commodity>
      </Item>
   </Item>
</Root>

我觉得这是一个非常复杂的 xml 结构,因为它有一个嵌套标签。有没有办法为结构生成java类?

【问题讨论】:

  • 快速的 Google 搜索或 stackoverflow 搜索可能会发现已经有很多答案。

标签: java xml


【解决方案1】:

如果您有 XSD 或 DTD,则可以使用 JAXB 轻松创建文档表示。

如果您没有架构定义,我建议您编写它。不管怎样,它很快就会派上用场。只要您尝试验证文档或与任何人共享您的格式。

顺便说一句,这不是一个复杂的 XML 文档;)

【讨论】:

  • 您可以在没有任何 XSD 或 DTD 的情况下创建 JAXB 映射。
  • @buc 我知道可以使用注释来完成,但问题涉及生成类。有没有办法在没有架构定义的情况下做到这一点?
  • 你说得对,我忽略了那部分。
【解决方案2】:

虽然我完全同意@Tom 关于架构的必要性,但有时这是一种矫枉过正的做法。您可以使用快速简单的 OXM 框架,例如 XStream。见http://x-stream.github.io/

【讨论】:

    【解决方案3】:

    请注意,XSD(或其他模式)仅对直接子级提供约束。所以不清楚您是否只有两个级别的 Item 或无限嵌套。如果是前者,您将不得不手动编写代码 - 架构不会为您完成。

    从文档语料库中推断模式是一项非常艰巨的任务。

    我还要评论说,Item 的嵌套使用不太可能是指示 Item 的多个属性的有用方式。

    【讨论】:

      猜你喜欢
      • 2012-06-28
      • 1970-01-01
      • 2016-08-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-01-21
      • 1970-01-01
      相关资源
      最近更新 更多