0

我想解析我的 XSD 并从中获取元素和数据类型。我正在寻找某种机制,我可以在其中传递element名称并为其获取名称datatype

在搜索了一个高效、高性能的开源库后,我发现XERCES2这将是一个不错的选择。因此,我XERCES2用来解析我的 XSD。我有点卡在无法datatype绕过element name. 如果有人可以对此提供一些指导,那就太好了。

我想获得typefor element name

以下是我的 XSD:

<?xml version="1.0" encoding="utf-8"?>
<!-- Created with Liquid Technologies Online Tools 1.0 (https://www.liquid-technologies.com) -->
<xs:schema attributeFormDefault="unqualified"
    elementFormDefault="qualified"
    xmlns:xs="http://www.w3.org/2001/XMLSchema">
    <xs:element name="breakfast_menu">
        <xs:complexType>
            <xs:sequence>
                <xs:element maxOccurs="unbounded" name="food">
                    <xs:complexType>
                        <xs:sequence>
                            <xs:element name="name" type="xs:string" />
                            <xs:element name="price" type="xs:string" />
                            <xs:element name="description" type="xs:string" />
                            <xs:element name="calories" type="xs:unsignedShort" />
                        </xs:sequence>
                    </xs:complexType>
                </xs:element>
            </xs:sequence>
        </xs:complexType>
    </xs:element>
</xs:schema> 

以下是我的 Java 代码,我在其中传递 XSD 文件的位置并使用以下方法对其进行解析XERCES2

public class Xerces2Parser {

    public static void main(String[] args) throws URISyntaxException, ClassNotFoundException, InstantiationException, IllegalAccessException,
                        ClassCastException, IOException {
        String xsdPath = Paths.get(Xerces2Parser.class.getClassLoader().getResource("test.xsd").toURI()).toFile().getAbsolutePath();
        String filePath = Path.of(xsdPath).toString();
        InputStream inputStream = new FileInputStream(filePath);
        // System.out.println(readFromInputStream(inputStream));

        DOMImplementationRegistry registry = DOMImplementationRegistry.newInstance();
        XSImplementation impl = (XSImplementation) registry.getDOMImplementation("XS-Loader");
        XSLoader schemaLoader = impl.createXSLoader(null);
        LSInput input = new DOMInputImpl();
        input.setByteStream(inputStream);
        XSModel model = schemaLoader.load(input);
        XSElementDeclaration decl = model.getElementDeclaration("name", "");
        XSTypeDefinition model1 = model.getTypeDefinition("name", "");
        System.out.println(model1);

        XSElementDeclaration elementDec = (XSElementDeclaration) model.getTypeDefinition("breakfast_menu", null);
        System.out.println(elementDec);
    }
}

另外,我有一个问题:我有一个 XML 文件,我正在使用SAX解析器为每个我想知道 XSD 类型的元素解析它。因此我正在这样做,所以我想知道是否XERCES2是最佳选择,或者我可以使用其他一些库SAXON

4

0 回答 0