2009-07-21 15 views
0

j2meアプリケーションで単純なXMLファイルを解析しようとしています。しかし、構文解析が失敗した:kxml2単純なXMLの解析

XMLファイル

<companies> 
     <company CompanyId="6"> 
      <CompanyName>Test Company 1</CompanyName> 
      <SapNumber>0</SapNumber> 
      <RootCompanyId>1</RootCompanyId> 
      <ParentCompanyId /> </company> 
    </companies> 

パーサスニペット

KXmlParser parser = new KXmlParser(); 
    parser.setInput(new InputStreamReader(new ByteArrayInputStream(input.getBytes()))); 
    parser.nextTag(); 
    parser.require(XmlPullParser.START_TAG, null, "companies"); 

    while(parser.nextTag() == XmlPullParser.START_TAG) 
    { 
     Company temp_company = new Company(); 
     parser.require(XmlPullParser.START_TAG, null, "company"); 
     String CompanyID = parser.getAttributeValue(0); 
     temp_company.putValue("CompanyId", CompanyID); 
     while(parser.nextTag() == XmlPullParser.START_TAG) 
     { 
      if(parser.getName() == "CompanyName") 
      { 
       temp_company.putValue("CompanyName", parser.nextText()); 
      } 
     } 
     parser.require(XmlPullParser.END_TAG, null, "company"); 
     listCompany.put(CompanyID, temp_company); 
    } 
    parser.require(XmlPullParser.END_TAG, null, "elements"); 
+0

どのように解析が失敗しますか?例外はありますか? – kgiannakakis

+0

例外:予期しないタイプ(位置:テキスト:Test Company1 ... –

答えて

1

私は私が間違ってここに起こっているかを見ることができますね。 <company>タグを一致させ、CompanyId属性の値を取得したら、whileループを入力します。しかし、この時点では何が起こるかを観察:

  1. を使用すると、while条件を実行して初めて、パーサは、このように条件が真となり、あなたは内のテキストを取得する場合は、<CompanyName>開始タグと一致しますタグ。
  2. 私もkXmlの内部の仕組みと密接しかしパーサーの状態がテキストノードを指して(つまり<CompanyName>タグ内にある)、または終了タグ(すなわちにする必要がありますいずれかの2回目の反復ではないです。</CompanyName>)。いずれにしても、開始タグにないため、条件が失敗します。
  3. この時点で、次のタグが終了タグ<company>である必要がありますが、状態は変わらず、これは満足できません。

私の最高の推測では、内部ポインタが<CompanyName>内のテキストノードを指しているとあなたが"unexpected type (position: Text: Test Company1..."メッセージを取得する理由があるということです。

関連する問題