2015-03-02 39 views
0

我已經做了一個解析器,因爲我得到了所有的XML標記的值,但我想獲得一些值作爲參數在標籤內,我不知道如何從標籤得到它,示例XML是如下: sample.xml中如何從android中的xml標記獲得價值

<ChargeableRateInfo averageBaseRate="226.7" averageRate="192.69" 
commissionableUsdTotal="192.69" currencyCode="USD" maxNightlyRate="192.69" 
nightlyRateTotal="192.69" surchargeTotal="46.8" total="239.49"> 
<NightlyRatesPerRoom size="1"><NightlyRate baseRate="226.7" 
rate="192.69" promo="true"/></NightlyRatesPerRoom> 

,我想「averageRate」的價值,「nightlyRateTotal」,「總」,但我不知道如何獲得該數據?我的解析器如下:

while (eventType != XmlPullParser.END_DOCUMENT && !done) { 
       tagName = parser.getName(); 

       switch (eventType) { 
       case XmlPullParser.START_DOCUMENT: 
        break; 
       case XmlPullParser.START_TAG: 
        if (tagName.equals(ITEM)) { 
         rssFeed = new RSSFeed_SelectedHotelResult(); 

        } 

        if (tagName.equals(DESCRIPTION)) { 
         name = parser.nextText().toString(); 
         hotel_name_list.add(name); 
         System.out 
           .println(":::::::::::::::::DescriptionL:lLLLLLLLLLL" 
             + name); 
        } 
        if (tagName.equals(OFFER)) { 
         offer = parser.nextText().toString(); 
         hotel_offer_list.add(offer); 
         System.out.println(":::::::::::::::::Offer" + offer); 
        } 

        if (tagName.equals(HOTEL_IMG)) { 
         thumbNailUrl = parser.nextText().toString(); 
         hotel_image_list.add(thumbNailUrl); 
        } 
        if (tagName.equals(HOTEL_LOCATION)) { 
         locationDescription = parser.nextText().toString(); 
         hotel_lOCATION_DESC.add(locationDescription); 
         System.out 
           .println("::::::::;Location deccription:::::::::::;;" 
             + locationDescription); 
        } 

        if (tagName.equals(HOTEL_RATE_IMG)) { 
         tripAdvisorRatingUrl = parser.nextText().toString(); 
        } 

        if (tagName.equals(HOTEL_PRICE)) { 
         lowRate = parser.nextText().toString(); 
        } 

        if (tagName.equals(HOTEL_RATING)) { 
         hotelRating = parser.nextText().toString(); 
         hotel_rate_list.add(hotelRating); 
        } 

        if (tagName.equals(HOTEL_ADDRESS)) { 
         address1 = parser.nextText().toString(); 
         hotel_address_list.add(address1); 
         System.out 
           .println(":::::::::::::hotel address:::::::::::" 
             + address1); 
        } 
        if (tagName.equals(DESTINATION_ID)) { 
         destinationId = parser.nextText().toString(); 
         dest_id_list.add(destinationId); 
         System.out 
           .println("*********Here Is DestinationID:************" 
             + destinationId); 
        } 
        if (tagName.equals(CITY)) { 
         city = parser.nextText().toString(); 
         city_list.add(city); 
         System.out.println("*********Here Is City:************" 
           + city); 
        } 
        if (tagName.equals(HOTEL_ID)) { 
         hotelId = parser.nextText().toString(); 
         hotel_id_list.add(hotelId); 
         System.out 
           .println("*********Here Is HotelID:************" 
             + hotelId); 
        } 
        if (tagName.equals(LATITUDE)) { 
         latitude = parser.nextText().toString(); 
         latitude_list.add(latitude); 
         System.out 
           .println("*********Here Is Latitude:************" 
             + hotelId); 
        } 
        if (tagName.equals(LONGITUDE)) { 
         longitude = parser.nextText().toString(); 
         longitude_list.add(longitude); 
         System.out 
           .println("*********Here Is Longitude:************" 
             + hotelId); 
        } 

        break; 
       case XmlPullParser.END_TAG: 
        if (tagName.equals(CHANNEL)) { 
         done = true; 
        } else if (tagName.equals(ITEM)) { 

         rssFeed = new RSSFeed_SelectedHotelResult(name, 
           thumbNailUrl, tripAdvisorRatingUrl, 
           hotelRating, locationDescription, lowRate, 
           destinationId, city, hotelId, latitude, 
           longitude, offer); 
         rssFeedList.add(rssFeed); 

        } 

        break; 
       } 
       eventType = parser.next(); 
      } 
     } catch (Exception e) { 
      e.printStackTrace(); 
     } 

     return rssFeedList; 

    } 
+0

你解析正確嗎? CITY,HOTEL_ID和所有的價值是什麼? – 2015-03-02 04:57:44

+0

@ Tushar-Hello tushar,謝謝你的迴應,是的,我正確地獲取了所有的值,但只是想知道如何獲取標籤內xml參數的值。 – 2015-03-02 05:01:12

+0

您可以試試[this](http://stackoverflow.com/a/15401895/3531756)方法。 – 2015-03-02 05:05:48

回答

0

嘗試... parser.getAttributeValue(null, "averageRate");

+0

非常感謝你..工作.. :) – 2015-03-02 05:58:16

1

您可以使用DOM Parser來代替。

Document doc = parser.getDomElement(YOUR_XML); 
String averageBaseRate= doc.getElementsByTagName("ChargeableRateInfo ").item(0).getAttributes().getNamedItem("averageBaseRate").getNodeValue(); 
String averageRate= doc.getElementsByTagName("ChargeableRateInfo ").item(1).getAttributes().getNamedItem("averageRate").getNodeValue(); 
... 
0

TAG_ITEM = 「ChargeableRateInfo」;

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

    xpp.setInput(new StringReader ("your_xml/")); 
    int eventType = xpp.getEventType(); 
    while (eventType != XmlPullParser.END_DOCUMENT) { 
     if(eventType == XmlPullParser.START_DOCUMENT) { 
      System.out.println("Start document"); 
     } else if(eventType == XmlPullParser.END_DOCUMENT) { 
      System.out.println("End document"); 
     } else if(eventType == XmlPullParser.START_TAG) { 
      System.out.println("Start tag "+xpp.getName()); 

// For Attribute 
String tag = parser.getName(); 
    if (TAG_ITEM.equals(tag)) { 

     Log.d(LOG_NAME, parser.getAttributeValue(null, "averageBaseRate");); 


     Log.d(LOG_NAME, parser.getAttributeValue(null, "averageRate");); 


     Log.d(LOG_NAME, parser.getAttributeValue(null, "commissionableUsdTotal");); 


     Log.d(LOG_NAME, parser.getAttributeValue(null, "currencyCode");); 
    } 


     } else if(eventType == XmlPullParser.END_TAG) { 
      System.out.println("End tag "+xpp.getName()); 
     } else if(eventType == XmlPullParser.TEXT) { 
      System.out.println("Text "+xpp.getText()); 
     } 
     eventType = xpp.next(); 
    }