Разбор XSD и получение вложенных элементов - PullRequest
0 голосов
/ 09 ноября 2011

Пройдя эту страницу, я написал следующий код для разбора файла 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>

Я хочу прочитать все элементы, не только базовый элементне уверен, как поступить.Спасибо за помощь.

1 Ответ

1 голос
/ 09 ноября 2011

Я думаю, что вы пытаетесь перебрать XSNamedMap неправильно.Причина, по которой вы получаете только элемент страны, заключается в том, что он является корневым элементом.Вам, вероятно, придется спуститься в XSNamespaceItem и вызвать getComponents, чтобы получить другой набор XSNamedMap объектов.

Это правильно проанализирует XSD, но вам все равно придется пройти по дереву.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...