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

时间:2010-10-22 12:42:04

标签: java xml xsd

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

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

9 个答案:

答案 0 :(得分:20)

使用标准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");

答案 1 :(得分:4)

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

答案 2 :(得分:4)

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

你可以从......开始......

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

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

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

答案 3 :(得分:4)

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();
        }
    }
}

答案 4 :(得分:2)

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

答案 5 :(得分:1)

JAXB

请参阅此question

答案 6 :(得分:1)

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

答案 7 :(得分:0)

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

答案 8 :(得分:0)

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

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