使用Java获取.XSD文件的对象表示

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

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

有点像:

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

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

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

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

包含如下方法:

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

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

尝试org.apache.ws.jaxme.generator.sg.impl.JAXBSchemaReader 。 以下是可能有效的示例代码段:

 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 } } 

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

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

为什么不把它作为DOM文档阅读,然后做任何你想做的事情?