java - 解析 XSD 并获取嵌套元素

标签 java xsd

经过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/

相关文章:

java - 具有两个观察者列表的观察者模式

java - JAXB XmlAnyElement 设置 namespace 属性

java - 在 JAXB 生成中创建对象

c# - 在 xsd.exe 生成的类之后设置适当的 XML 命名空间

c# - 如何从有限制的类生成 XSD

java - 二维多类型列表

java - Google Cloud Endpoints - 在资源 getter 中返回另一个资源

c# - 保留选择序列中的顺序 (LINQ To XSD)

java - 相当于 Java 中的 vector<T>

java - 无法部署由 NetBeans 构建的任何小程序