2011-11-09 158 views
0

经过this页面后,我编写了以下代码来解析XSD文件。但是,我只获取根元素,并且我迷路了,以便如何获取其中的嵌套元素。 代码:解析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

用户按标签浏览,而不按标题浏览。在标题中重复使用主标签'[java]'是不必要的,它只会混淆整个[Java列表问题](http://stackoverflow.com/questions/tagged/java)。 – BalusC

+0

感谢您的更正! – rgamber

回答

1

我认为你试图错误地迭代XSNamedMap。你只得到国家元素的原因是因为它是根本因素。您可能不得不下降到XSNamespaceItem并致电getComponents检索另一组XSNamedMap对象。

这将正确地解析XSD,但您仍然必须遍历树。

+1

所以我应该得到XSNamespaceItem而不是XSNamedMap。我懂了。谢谢。我会尝试。 – rgamber

+0

我能够使用XSlevelDecl内的XSComplexTypeDecl内的XSParticles来完成它,它是地图中的一个项目。谢谢。 – rgamber