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

时间:2009-07-23 14:21:38

标签: java xml xsd

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

XSOM看起来很有希望,因为它会解析一个XSD文件,并以直接的方式提供所有属性。

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

[结论] 感谢大家的回复,他们真的很有帮助。我能够使用JAXP,Eclipses EMF和XSOM编写实现,这些实现都可以按预期工作。

JAXP非常直接,易学易懂。 EMF实际上是一个很难正常行动的痛苦,有很多罐子必须包含它才能独立工作,我不推荐它。 XSOM甚至比JAXP实现更简单,所以我最终还是继续使用它。

5 个答案:

答案 0 :(得分:4)

是的,有一种标准方式。

您正在寻找JAXB

答案 1 :(得分:2)

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

答案 2 :(得分:1)

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

答案 3 :(得分:1)

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

String filePath = "Your file path here.";
XsdParser parserInstance = new XsdParser();
Stream<XsdElement> 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架构定义的类型。

答案 4 :(得分:0)

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