【问题标题】:Use xpath instead of XSD object generation for accessing XML details?使用 xpath 而不是 XSD 对象生成来访问 XML 详细信息?
【发布时间】:2013-12-16 09:29:57
【问题描述】:

有一个托管在我要解析的服务器上的 XML 文件。通常我从 XML 生成一个 XSD,然后从这个 XSD 生成 java pojo。然后,我使用 jackson 将 XML 解析为 java 对象表示。仅使用 xpath 不是更简单吗?这意味着我不需要基于 XML 生成对象层次结构,并且如果 XML 发生更改,我也不需要重新生成对象层次结构。 xpath 看起来更加简洁直观?

为什么我应该使用 XSD ,对象生成而不是 xpath ?

【问题讨论】:

    标签: java xml xpath xsd


    【解决方案1】:

    根据XML Schema 规范,XSD 用于定义XML 文档的结构、内容和语义。这意味着您可以使用 XSD 来验证您的 XML 文件。

    根据您的情况,如果您只需要从 XML 文件中获取一些值,您可能不需要生成整个对象树。在这种情况下,XPath 是要走的路。但是,您仍然可能需要一个 XSD 文件,以便在解析 XML 文件之前对其进行验证。这样你就可以让你的软件fail fast,当你的 XML 文件的结构发生变化时,它会建议你改变你的 XPath 表达式。但要使其正常工作,您不应使用从 XML 文件生成的 XSD,而应使用符合 XPath 表达式的单独的预生成 XSD 文件。

    【讨论】:

      【解决方案2】:

      我认为这两种方法都有效,具体取决于具体情况。 归根结底,您想从该远程 xml 文件中提取值并对其进行处理。

      首先要考虑的标准是该文件的大小和数据元素的数量。 如果只是几个,那么 xpath 提取应该很简单。但是,如果该 xml 文件表示一个相当大和/或复杂的数据结构,那么您可能希望反序列化为您可以使用的 Java 数据结构,而 JAXB 将是一个不错的选择。

      如果远程服务器遵循或发布 XML Schema,JAXB 将会更容易/更好。如果不是这样,并且经常发生重大变化,那么无论哪种方式,您都会受到影响,但对于 JAXB 尤其如此。有一些方法可以通过使用 XSLT 对 xml 进行预处理以强制将其转换为更可靠的形式来解决问题,但这很可能只是部分解决方案。

      【讨论】:

        猜你喜欢
        • 2020-05-11
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-11-18
        • 2013-11-27
        相关资源
        最近更新 更多