经过this之后页上,我编写了以下代码来解析 XSD 文件。但是我只得到根元素,并且我不知道如何获取其中的嵌套元素。 代码:
XMLSchemaLoader loader = new XMLSchemaLoader();
XSModel model = loader.loadURI(url.toURI().toString());
XSNamedMap map = model.getComponents(XSConstants.ELEMENT_DECLARATION); //returns the root component
if(map!=null ){
for (int j=0; j<map.getLength(); j++) {
String name = map.item(j).getName(); //returns 'country' correctly.
}
}
我不会发布整个 xsd,但结构如下:
<xsd:element name="country">
<xsd:complexType>
<xsd:annotation>
<xsd:appinfo id="substring">No</xsd:appinfo>
</xsd:annotation>
<xsd:sequence minOccurs="1" maxOccurs="unbounded">
<xsd:element name="states" minOccurs="1" maxOccurs="1" >
<xsd:complexType>
<xsd:annotation>
<xsd:appinfo id="substring">No</xsd:appinfo>
</xsd:annotation>
<xsd:sequence>
<xsd:element name="cities" minOccurs="1" maxOccurs="unbounded">
</xsd:element>
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" />
</xsd:complexType>
</xsd:element>
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string"></xsd:attribute>
</xsd:complexType>
</xsd:element>
我希望读取所有元素,而不仅仅是基本元素,并且不知道如何继续。感谢您的帮助。
最佳答案
我认为您试图迭代 XSNamedMap
错误地。您只获得国家/地区元素的原因是因为它是根元素。您可能必须下降到 XSNamespaceItem
并调用getComponents
检索另一组 XSNamedMap
对象。
这将正确解析 XSD,但您仍然需要遍历树。
关于java - 解析 XSD 并获取嵌套元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8069358/