2011-11-09 7 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を間違って反復しようとしています。 country要素だけを取得している理由は、それがルート要素であるためです。おそらくXSNamespaceItemに降りてgetComponentsと呼び出すと、XSNamedMapオブジェクトの別のセットを取得する必要があります。

これはXSDを正しく解析しますが、依然としてツリーを走査する必要があります。

+1

私はXSNamedMapの代わりにXSNamespaceItemを取得する必要があります。そうですか。ありがとう。やってみます。 – rgamber

+0

マップ内の項目であるXSElementDecl内のXSComplexTypeDecl内のXSParticlesを使用してこれを実行できました。ありがとう。 – rgamber

関連する問題