0

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

XML 看起来像这样:

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

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

4

3 回答 3

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 传入时读取它,就可以更容易地了解如何实现它的整体情况。研究那个链接,它会给你你需要知道的一切。

于 2013-09-22T20:50:30.497 回答
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")) {
      //....
    }
于 2013-09-22T20:52:02.533 回答
0

谢谢大家的回答。我在这里使用使用教程并编写了此方法来搜索 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;
         }
于 2013-09-22T21:36:17.743 回答