2013-03-26 42 views
1

我想解析從數據庫軟件導出的XML文件,用於我的android應用程序。 然而,一些標籤的紛紛議論,像這樣:Android:解析XML數據:帶參數的標籤

<row>
<value column="Index" null="false">1</value>
<value column="Front" null="false">INFO</value>
<value column="Back" null="false">INFO</value>
<value column="Check" null="false">0</value>
</row>

做我試圖找到開始標記解析它指定哪些字符串值? (例如:找到行我比較開始水龍頭「行」,如果它返回真我計算數據。我該怎麼做每個值,即索引,正面,背面和檢查分開?)

我的Java代碼如下

try{ 
    XmlPullParserFactory factory = XmlPullParserFactory.newInstance(); 
    factory.setNamespaceAware(true); 
    XmlPullParser xpp = factory.newPullParser(); 

    InputStream stream = context.getResources().openRawResource(com.Whydea.chemistryhelper.R.raw.appxml); 
    xpp.setInput(stream, null); 

    int eventType = xpp.getEventType(); 
    while (eventType != XmlPullParser.END_DOCUMENT){ 
     if(eventType==XmlPullParser.START_TAG){ 
      handleStartTag(xpp.getName()); //handels Start Tag 
     } else if (eventType==XmlPullParser.END_TAG){ 
      handleEndTag(xpp.getName()); 
      Ctag=null; 
     } else if (eventType==XmlPullParser.TEXT){ 
      handleText(xpp.getText()); 
     } 
     eventType=xpp.next(); 
    } 

    }catch (NotFoundException e){ 
     Log.d("XMLpp",e.getMessage());   
    }catch (XmlPullParserException e){ 
     Log.d("XMLpp",e.getMessage()); 
    }catch (IOException e){ 
     Log.d("XMLpp",e.getMessage()); 
    }  

`

編輯:

每個 「身價」 開始標記有自己的屬性(列= ...),我如何訪問這些?

例如:要訪問一個行,我有一個字符串常量,值爲「row」,並檢查開始標記是否與此對應,並且它有效。但是,當我聲明一個字符串常量的值「值列= \」檢查\「空= \」假\「」(我必須使用\其他明智的「給錯誤),它沒有找到找到開始標籤。應我的常數是什麼?

回答

0

如果我明白你的問題正確,則讓每一個你需要做以下的值,基本上你想獲得每個屬性的值的XML標籤內

  int attributeCount = xpp.getAttributeCount(); 
     for(int i = 0; i<attributeCount; i++){ 
      String name = xpp.getAttributeName(i); 
      //Log.d(TAG, "Name: "+name); 
      if(name != null && name.equalsIgnoreCase("column")){ 

       return Integer.parseInt(xpp.getAttributeValue(i));     
      } 
     } 

所以一旦遇到該行,就會在查找到起始標籤「value」後找到它,然後使用上面的代碼獲取屬性的單個值。

按照你的評論,如果你想獲得一個XML標籤的文本值,那麼你將不得不使用getText()方法。一旦你找到了START_TAG值然後執行以下代碼:

    eventType = xpp.next(); 
        if(eventType == XmlPullParser.TEXT){ 
         String text = xpp.getText();        
        } 

的XML標籤「INFO」值將返回「INFO」

+0

<值列=「返回」空=「假」> INFO,我想要的信息數據 – xSooDx 2013-03-26 12:44:29

+0

我已編輯我的答案如何檢索文本值'信息' – 2013-03-26 12:54:30

+0

非常感謝,這解決了我的問題。 – xSooDx 2013-03-26 15:10:10

0

你開發生成XML文件中的應用程序?如果是這樣,你爲什麼不改變它?這將是更容易解析XML,如果它具有以下格式:

<item Index="1" Front="INFO" Back="INFO" Check="0"/> 
<item Index="2" Front="INFO" Back="INFO" Check="1"/> 
+0

他們仍然有不同的屬性。我如何訪問這些屬性來識別它們? – xSooDx 2013-03-26 11:22:06

+0

使用SAX解析器:只需重寫_startElement_,_endElement_和_character_方法。 在_startElement_中,您可以獲得每個XML節點,並且可以獲取屬性值。怎麼樣?使用_Attributes_對象(_startElement_參數):您將獲得「INFO」執行此操作_attributes.getValue(「Front」)_ – Alberto 2013-03-26 17:50:25

0
try { 
     final Service S = new Service(); 
     String xmlString = S.ImportAllPollBoothStatus(IMEI,asscd, boothno); 
     if(xmlString.toLowerCase().trim().equals("false")){ 
      return false; 
     } 
     DocumentBuilderFactory docFactory = DocumentBuilderFactory 
       .newInstance(); 
     DocumentBuilder docBuilder = docFactory.newDocumentBuilder(); 
     InputSource is = new InputSource(); 
     is.setCharacterStream(new StringReader(xmlString)); 
     Document doc = docBuilder.parse(is); 

     NodeList nodes = doc.getElementsByTagName("HT"); 

     for (int i = 0; i < nodes.getLength(); i++) { 

      Element element = (Element) nodes.item(i); 
      NodeList blockidnodes = doc.getElementsByTagName("Table"); 

      for (int blockidcount = 0; blockidcount < blockidnodes 
        .getLength(); blockidcount++) { 

       NodeList PollpercentId = element 
         .getElementsByTagName("PollpercentId"); 
       Element line1 = (Element) PollpercentId.item(blockidcount); 

       NodeList asscd1 = element 
         .getElementsByTagName("asscd"); 
       Element line2 = (Element) asscd1.item(blockidcount); 

       NodeList pollgcd = element 
         .getElementsByTagName("pollgcd"); 
       Element line3 = (Element) pollgcd.item(blockidcount); 


       NodeList SessionYearIdref = element 
         .getElementsByTagName("SessionYearIdref"); 
       Element line4 = (Element) SessionYearIdref.item(blockidcount); 

       NodeList MaleVoters = element 
         .getElementsByTagName("MaleVoters"); 
       Element line5 = (Element) MaleVoters.item(blockidcount); 

       NodeList FemaleVoters = element 
         .getElementsByTagName("FemaleVoters"); 
       Element line6 = (Element) FemaleVoters.item(blockidcount); 

       NodeList UpdatedDate = element 
         .getElementsByTagName("UpdatedDate"); 
       Element line7 = (Element) UpdatedDate.item(blockidcount); 

       NodeList timeslot = element 
         .getElementsByTagName("timeslot"); 
       Element line8 = (Element) timeslot.item(blockidcount); 


      this.db.insertVotingStatus(
         getCharacterDataFromElement(line1), 
         getCharacterDataFromElement(line2), 
         getCharacterDataFromElement(line3), 
         getCharacterDataFromElement(line4), 
         getCharacterDataFromElement(line5), 
         getCharacterDataFromElement(line6), 
         getCharacterDataFromElement(line7), 
         getCharacterDataFromElement(line8)); 

      } 
     } 


    } 
    catch (Exception e) { 
     Log.e("EXCEPTION DURING VIDHANSABHA INSERION", 
       "======Insert-VIDHANSABHA-DETAILS=====================" + e); 
     return false; 
    } 
    return true; 
代碼