2009-07-21 172 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 2009-07-21 12:28:18

回答

1

我想我可以看到是怎麼回事錯在這裏。在匹配<company>標籤並獲得CompanyId屬性的值後,您將輸入一個while循環。但觀察在這一點上會發生什麼:

  1. 你執行,而條件下的第一次,分析器將匹配<CompanyName>開始標記,因此如果條件將是真實的,你會得到裏面的文本標籤。
  2. 我不KXML的內部工作過於親密,但是,從第二次迭代解析器狀態必須是在文本節點指向(也就是<CompanyName>標籤內),或在結束標記(即</CompanyName>)。無論哪種方式,你條件會失敗,因爲你不在開始標籤。
  3. 此時您需要下一個標籤爲<company>的結束標籤,但是,您的狀態仍未更改,因此不會得到滿足。

我最好的猜測是,內部指針在裏面<CompanyName>文本節點指向,這就是爲什麼你得到"unexpected type (position: Text: Test Company1..."消息。