2013-09-22 21 views
0

下面是我正在嘗試的:我有一個名稱列表。我想根據名稱搜索XML文件。Android搜索基於一些條件的XML

XML看起來是這樣的:

<book> 
     <string> book name </string> 
     <array> 
      <string> Name1 </string> 
      <string> Name2 </string> 
     </array> 
    </book> 

現在我想搜索說「名1」,如果它符合我想要得到的書的名字。 這可能嗎?如果是的話,有人可以提供一些代碼/片段,或者告訴我如何做到這一點。謝謝

回答

0

謝謝大家的答案。我正在使用教程here並編寫了此方法來搜索XML。

 public List<String> search(String key, String url){ 

      List<String> items = new ArrayList<String>(); 
      XmlParser parser = new XmlParser(); 
      String xml = parser.getXmlFromUrl(url); // getting XML 
      Document doc = parser.getDomElement(xml); 
      NodeList nl = doc.getElementsByTagName("book"); 

      for(int i = 0; i<nl.getLength();i++){ 
       Element e = (Element) nl.item(i); 
       NodeList n = e.getElementsByTagName("string"); 
       if(parser.getElementValue(n.item(1)).equals(key) || 
       parser.getElementValue(n.item(2)).equals(key)){ 

       items.add(parser.getElementValue(n.item(0))); 
       } 
      } 
      return items; 
     } 
0

Android有一些內置的XML解析函數。看看http://developer.android.com/training/basics/network-ops/xml.html

基本上是:

1)設置爲XML內容的InputStream(如果您下載,或從getResources閱讀它()爲例)

2)套裝解析器:XmlPullParser parser = Xml.newPullParser();

3)開始循環讀取XML。當parser.getName()。equals(「book」)時,繼續直到你到達parser.getName().equals("string")並保存parser.getText();的結果。然後,如果繼續,然後點擊parser.getName().equals("array"),然後再繼續輸入parser.getName().equals("string"),請檢查parser.getText()的結果以查看它是否與您的搜索字符串匹配。

清除泥?

解析XML比20年前公佈的要困難得多,但是一旦你明白瞭解析器在讀取XML時讀取XML,它就會更容易地看到關於執行它。研究這個鏈接,它給你你需要知道的一切。

0

有很多的方式來解析XML,我建議你使用Jsoup

它很容易從XML提取數據。

String html = "<?xml version=\"1.0\" encoding=\"UTF-8\"> 
<book> 
    <string> book name </string> 
    <array> 
     <string> Name1 </string> 
     <string> Name2 </string> 
    </array> 
</book></xml>"; 

Document doc = Jsoup.parse(html, "", Parser.xmlParser()); 

    Element book = doc.select("book").first(); 

    Element bookName = book.getElementsByTag("string").first(); 

    Elements array = book.getElementsByTag("array"); 

    for (Element e : array.select("string")) { 
     //.... 
    }