是否有标准的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文件。