2011-11-09 156 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