用于解析XSD架构文件的Java API

是否有Java API来解析XSD架构文件?

我找到了XSOM ,但它似乎不再被维护了。

使用标准JDK 6:

 System.setProperty(DOMImplementationRegistry.PROPERTY, "com.sun.org.apache.xerces.internal.dom.DOMXSImplementationSourceImpl"); DOMImplementationRegistry registry = DOMImplementationRegistry.newInstance(); com.sun.org.apache.xerces.internal.impl.xs.XSImplementationImpl impl = (XSImplementationImpl) registry.getDOMImplementation("XS-Loader"); XSLoader schemaLoader = impl.createXSLoader(null); XSModel model = schemaLoader.loadURI("src/test/resources/my.xsd"); 

我们倾向于使用Apache Xerces http://xerces.apache.org/ 。 对我们来说真的很好。

您可以使用XMLBeans http://xmlbeans.apache.org 。 对于大多数围绕XML / Java绑定的用例,人们似乎都在转向JAXB,因为它是内置的。但是对于你想要做的事情,XMLBeans提供了一些很好的高级数据结构的访问,这些数据结构以一种易于使用的方式表示模式。遍历。

你可以从……开始

 SchemaTypeSystem sts = XmlBeans.compileXsd(new XmlObject[] { XmlObject.Factory.parse(xsdFile) }, XmlBeans.getBuiltinTypeSystem(), null); 

从那里你应该能够弄清楚如何从JavaDoc深入到SchemaTypeSystem。

如果有人知道一种方便且相对支持的替代方案,那么了解它会很棒。 我正在积极寻找。

 public class XsdElements { public static void main(String args[]) { try { // parse the document DocumentBuilderFactory docBuilderFactory = DocumentBuilderFactory.newInstance(); DocumentBuilder docBuilder = docBuilderFactory.newDocumentBuilder(); Document doc = docBuilder.parse (new File("C:/Users/rb054/Desktop/Descriptor.1.5.1.xsd")); NodeList list = doc.getElementsByTagName("xs:element"); //loop to print data for(int i = 0 ; i < list.getLength(); i++) { Element first = (Element)list.item(i); if(first.hasAttributes()) { String nm = first.getAttribute("name"); System.out.println(nm); String nm1 = first.getAttribute("type"); System.out.println(nm1); } } } catch (ParserConfigurationException e) { e.printStackTrace(); } catch (SAXException e) { e.printStackTrace(); } catch (IOException ed) { ed.printStackTrace(); } } } 

试试EasyWSDL – 它可以解析XSD和WSDL规范。

JAXB

看到这个问题

我使用了这个Xerces,但它并没有解析抽象元素的替代组。 请参考我的问题https://stackoverflow.com/questions/25203139/parsing-a-abstract-node-with-substitutiongroup-using-apache-xerces-api-in-java

如上所述,模式本身就是有效的XML。 你要加载什么,validation? 如果是这样,那么javax.xml.validation包中有一些方便的类。

取决于您的具体要求。 此页面概述了主要选项及其支持的用例。

需要考虑的一件事:根据您正在部署的平台和您正在使用的其他框架,您的依赖关系树中可能已经存在各种API(例如,xerces在App Server中特别常见)。 注意版本冲突,这可能是隔离和调试的噩梦。