问题描述
我想解析我的 XSD 并从中获取元素和数据类型。我正在寻找某种机制,我可以在其中传递 element
名称并为其获取 datatype
。
在搜索了一个高效且高性能的开源库后,我发现 XERCES2
将是一个不错的选择。因此,我使用 XERCES2
来解析我的 XSD。我有点卡在我无法绕过 datatype
获得元素的 element name
的地方。如果有人能就此提供一些指导,那就太好了。
我想获取元素 type
的 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
。
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)