2012-11-03 192 views
0

我解析兩個XML文件 - 這是我已經成功地使用XmlParser的分析: - 然而的Android解析XML屬性

public final String getElementValue(Node elem) { 
    Node child; 
    if (elem != null) { 
     if (elem.hasChildNodes()) { 
      for (child = elem.getFirstChild(); child != null; child = child 
        .getNextSibling()) { 
       if (child.getNodeType() == Node.TEXT_NODE) { 
        System.out.println("±VALUE: " 
          + child.getNodeValue().toString() 
          + " node type: " + child.getNodeType()); 
        return child.getNodeValue(); 
       } 

下一個XML文件,有我需要的屬性。我可以使用相同的解析器嗎?如果是的話,我該如何改變它來讀取屬性?我想要讀取的文件是http://cloud.tfl.gov.uk/TrackerNet/LineStatus - 我需要線路名稱和狀態說明。

我使用另一個類中的鍵 - 我怎麼明說哪個屬性我需要什麼?即: -

static final String KEY_TRANSPORT = "LineStatus"; // parent node 
static final String KEY_LINENAME = "???"; 
static final String KEY_LINEDESC = "???"; 

謝謝!

回答

1

關於XML的一點是,您需要讀取/解析整個文件以檢索任何信息,因此無法只讀取所需的位。您應該閱讀一次該文件,並將您可能需要的每個信息存儲在另一個類中,以便稍後可以檢索它。

這裏是我學會了如何從我的檔案解析XML,但是,我用了一個SAXParser的。您需要在startElement和endElement上設置布爾值爲true或false,以跟蹤您正在閱讀的XML文檔的標籤,然後重寫字符並在那裏恢復字符串,根據哪些布爾值爲真,將其存儲在持有者類中,記住布爾人會告訴你你在文檔裏面的位置。

如果你有一個複雜的文檔和很多你想要檢索的信息,Handler可以有很多子級,你需要重新檢查,因爲它很容易被混淆併發生錯誤。

的SAXParser:

http://www.anddev.org/parsing_xml_from_the_net_-_using_the_saxparser-t353.html http://www.androidpeople.com/android-xml-parsing-tutorial-using-saxparser


或者使用XMLPullParser,您可以在標籤中去使用循環,然後將信息存儲在標籤裏,你要尋找的。儘管如此,我從未使用過這種方法,所以我無法比較與第一種方法相比的效率。無論如何,您需要瀏覽標籤,直到您找到您要找的標籤。在這裏它是:

XmlPullParser tutorials; 
tutorials = XmlPullParserFactory.newInstance().newPullParser(); 
tutorials.setInput(downloadPath.openStream(), null); 

while (eventType != XmlPullParser.END_DOCUMENT) { 
    if (eventType == XmlPullParser.START_TAG) { 
     String tagName = tutorials.getName(); 
     if (tagName.equals("item")) { 
      // inner loop looking for link and title 
      while (eventType != XmlPullParser.END_DOCUMENT) { 
       if (eventType == XmlPullParser.START_TAG) { 
        if (tutorials.getName().equals("link")) { 
        } else if (tutorials.getName().equals(
          "title")) { 
        } 
       } else if (eventType == XmlPullParser.END_TAG) { 
        if (tutorials.getName().equals("item")) { 
         // save the data, and then continue with 
         // the outer loop 
         break; 
        } 
       } 
       eventType = tutorials.next(); 
      } 
     } 
    } 
    eventType = tutorials.next(); 
} 
+0

Last方法如在這裏找到:(步驟6)[tutsplus](http://mobile.tutsplus.com/tutorials/android/android-fundamentals-downloading-data-with-services /)(我似乎只限於兩個鏈接) – Aerinx