我想解析我的 XSD 并从中获取元素和数据类型。我正在寻找某种机制,我可以在其中传递element
名称并为其获取名称datatype
。
在搜索了一个高效、高性能的开源库后,我发现XERCES2
这将是一个不错的选择。因此,我XERCES2
用来解析我的 XSD。我有点卡在无法datatype
绕过element name
. 如果有人可以对此提供一些指导,那就太好了。
我想获得type
for 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
。