【问题标题】:Getting an object representation of an .XSD file in Java在 Java 中获取 .XSD 文件的对象表示
【发布时间】:2009-11-12 22:38:32
【问题描述】:

在 Java 中获取 XML 模式 (.XSD) 的静态类型表示的最简单方法是什么?

更具体地说,我希望能够以编程方式遍历 XSD 中所有已定义的 simpleType:s 和 complexType:s,获取已定义的元素及其类型等。

类似的东西:

for (XsdComplexType complexType : document.getDefinedComplexTypes()) {
  ..
}

请注意:我说的是 .XSD 文档的对象表示。我不是在寻找 xjc 从 XML 模式生成 Java 类的样式。

一种方法是简单地将标准 XML 读取工具应用于 .XSD 文件,但我认为周围有开源库可以帮助我解决问题。如上面的伪代码所示,我想要 XSD 文档的静态类型表示。

【问题讨论】:

    标签: java xml xsd


    【解决方案1】:

    你看过Apache XmlSchema吗?我从来没有用过,但它看起来很合适。

    【讨论】:

    【解决方案2】:

    查看Castor XML 库的Schema 类。和SchemaReader 加载它。它应该正是您正在寻找的。​​p>

    包含如下方法:

    
     public java.util.Enumeration getComplexTypes()
        Returns:
            an Enumeration of all top-level ComplexType declarations
    

    【讨论】:

      【解决方案3】:

      试试org.apache.ws.jaxme.generator.sg.impl.JAXBSchemaReader。这是一个可以工作的示例代码 sn-p:

      org.apache.ws.jaxme.generator.sg.SchemaSG schema = JaxbSchemaReader.parse(schema);
      org.apache.ws.jaxme.generator.sg.TypeSG types = schema.getTypes();
      for (TypeSG type : types) {
          if (type.getComplexTypeSG() != null) {
                 //do something here
          }
       }
      

      【讨论】:

      • 对这个答案投了几票……有人知道这个答案是否完全偏离轨道吗?
      【解决方案4】:

      虽然我同意并希望支持其他两个(目前)使用标准工具(例如 dom4j 或 jdom)提出的答案,但我想提出一个现成的建议。您可以使用 JiBX 或其他 XML 数据绑定工具直接从模式 XML 生成您喜欢的 Java 对象。

      或者您可以只使用标准的 DOM 解析器。

      【讨论】:

      • 请看我更新后的伪代码帖子。希望这可以解决问题。
      • Max:我认为您的意思是将 JAXB(或其他)应用于“Schema for Schemas”以生成与 XML Schema 元素对应的 java 对象。 schema 的这个 schema 并没有完全指定 XML Schema,但它可能足以用于绑定。它在 XML Schema 规范的附录 A 中:w3.org/TR/2004/REC-xmlschema-1-20041028/#normative-schemaSchema
      • @13ren:在我的旅行中,我发现 JAXB 有点过度设计。但那只是我的个人意见。当应用不正确时,JiBX 也可能看起来如此。无论如何,我觉得使用 OO 模式表示和标准 DOM 之间几乎没有区别。为了证明前者的合理性,POJO 需要携带一些内在价值,例如在普通 DOM 中实现的特定于模式的访问器。
      【解决方案5】:

      为什么不直接将其作为 DOM 文档读入,然后做任何你想做的事情?

      【讨论】:

      • 来自问题:“一种方法是简单地将标准 XML 读取工具应用于 .XSD 文件,但我认为周围有开源库可以帮助我解决问题。 "
      • 重新考虑说明您实际需要做什么(如要解决的问题)。我从您编辑的语句中看到的内容在 XSLT 中使用 XPath 很容易实现。
      猜你喜欢
      • 1970-01-01
      • 2011-09-29
      • 2017-02-11
      • 1970-01-01
      • 2012-04-30
      • 1970-01-01
      • 2013-12-22
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多