Android基于某些条件搜索XML

时间:2013-09-22 20:25:41

标签: android xml-parsing

这是我正在尝试的:我有一个名单。我想根据名称搜索XML文件。

XML看起来像这样:

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

现在我想搜索说“Name1”,如果匹配,我想得到这本书的名字。 这可能吗?如果是,有人可以提供一些代码/片段,或者告诉我如何做到这一步的步骤。谢谢

3 个答案:

答案 0 :(得分: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时就会更加容易,它会让你更容易看到如何使用它的整体情况实现它。研究该链接,它为您提供了您需要知道的一切。

答案 1 :(得分: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")) {
      //....
    }

答案 2 :(得分: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;
         }