我一直在寻找一种以编程方式解析XSD文件以生成XML映射的方法,以便我可以获取任何XSD文件并创建一个解析器来解析任何符合它的XML文件,以及我的google-fu已经很短了。
XSOM看起来很有希望,因为它会解析一个XSD文件,并以直接的方式提供所有属性。
是否有任何其他选项或标准库可用于从XSD文件生成XML文件解析器?
[结论] 感谢大家的回复,他们真的很有帮助。我能够使用JAXP,Eclipses EMF和XSOM编写实现,这些实现都可以按预期工作。
JAXP非常直接,易学易懂。 EMF实际上是一个很难正常行动的痛苦,有很多罐子必须包含它才能独立工作,我不推荐它。 XSOM甚至比JAXP实现更简单,所以我最终还是继续使用它。
答案 0 :(得分:4)
是的,有一种标准方式。
您正在寻找JAXB。
答案 1 :(得分:2)
答案 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文件。