是否有标准的Java实用程序在运行时解析XSD文件?

我一直在寻找一种方法来以编程方式解析XSD文件以生成XML映射,这样我就可以获取任何XSD文件并创建一个解析器来解析任何符合它的XML文件,而我的google-fu已经来了做空。

XSOM看起来很有前途,因为它将解析XSD文件并以直接的方式使其所有属性可用。

是否有任何其他选项或标准库可用于从XSD文件生成XML文件解析器?

[结论]感谢大家的回复,他们是真正的帮助。 我能够使用JAXP,Eclipses EMF和XSOM编写实现,所有这些都按照需要工作。

JAXP非常直接,易学易用。 EMF实际上是一个很难正常进行的痛苦,有很多jar子必须包括在内才能独立工作,我不推荐它。 XSOM甚至比JAXP实现更简单,所以我最终选择了它。

是的,有一种标准方式。

您正在寻找JAXB 。

如果您正在寻找将XML绑定到Java对象的东西,那么有一些选择:

  • JAXB ( 维基百科 )
  • Castor – “非标准”(但OSS)方法
  • JaxMe – JAXB标准的Apache实现

我过去曾使用Eclipse XSD库来解析XML Schema。 http://eclipse.org/modeling/mdt/?project=xsd ,发现使用起来非常简单有大量的jar文件可以解决,但在运行时只需要其中的5个来进行解析。

xmlet / XsdParser将XSD文件解析为Java结构:

String filePath = "Your file path here."; XsdParser parserInstance = new XsdParser(); Stream elementsStream = parserInstance.parse(filePath); 

然后,您可以在解析的elementsStream上导航,例如:

 XsdElement htmlElement = elements.findFirst().get(); XsdComplexType htmlComplexType = htmlElement.getXsdComplexType(); XsdAttribute manifestAttribute = htmlComplexType.getXsdAttributes().findFirst().get(); XsdChoice choiceElement = (XsdChoice) htmlComplexType.getXsdChildElement(); XsdGroup flowContentGroup = (XsdGroup) choiceElement.getXsdElements().findFirst().get(); XsdAll flowContentAll = (XsdAll) flowContentGroup.getChildElement(); XsdElement elem1 = (XsdElement) flowContentAll.getXsdElements().findFirst().get(); 

此示例导航由Html5架构定义的类型。

我个人最喜欢的是Apache的XMLBeans 。
它可以创建一个包含基于XSD的解析器,编写器和validation器的Jar文件。