首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Android:如何检索已解析的值

Android:如何检索已解析的值
EN

Stack Overflow用户
提问于 2011-05-05 09:25:20
回答 1查看 837关注 0票数 0

我希望在oncreate方法中使用for循环或while循环检索解析XML后得到的值:

代码语言:javascript
复制
<?xml version="1.0" encoding="ISO-8859-1" ?> 
<Phonebook>
    <PhonebookEntry>
        <firstname>Michael</firstname> 
        <lastname>De Leon</lastname> 
        <Address>5, Cat Street</Address> 
        <FileURL>http://android.mobishark.com/wp-content/uploads/2009/07/android-developers.png</FileURL> 
    </PhonebookEntry>
    <PhonebookEntry>
        <firstname>John</firstname> 
        <lastname>Smith</lastname> 
        <Address>6, Dog Street</Address> 
        <FileURL>http://www.cellphonehits.net/uploads/2008/10/android_openmoko.jpg</FileURL> 
    </PhonebookEntry>
    <PhonebookEntry>
        <firstname>Jember</firstname> 
        <lastname>Dowry</lastname> 
        <Address>7, Monkey Street</Address> 
        <FileURL>http://www.techdigest.tv/android.jpg</FileURL> 
    </PhonebookEntry>
</Phonebook>

我的守则:

ParsingXML.java

代码语言:javascript
复制
package com.example.parsingxml;

import java.net.URL;
import java.util.List;

import javax.xml.parsers.SAXParser;
import javax.xml.parsers.SAXParserFactory;

import org.xml.sax.InputSource;
import org.xml.sax.XMLReader;

import android.app.Activity;
import android.os.Bundle;
import android.widget.TextView;
public class ParsingXML extends Activity {



    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle icicle) {
         super.onCreate(icicle);

         /* Create a new TextView to display the parsingresult later. */
         TextView tv = new TextView(this);
         try {
              /* Create a URL we want to load some xml-data from. */
              URL url = new URL("http://cloud.eacomm.com/jm/sampleXML.xml");
              url.openConnection();
              /* Get a SAXParser from the SAXPArserFactory. */
              SAXParserFactory spf = SAXParserFactory.newInstance();
              SAXParser sp = spf.newSAXParser();

              /* Get the XMLReader of the SAXParser we created. */
              XMLReader xr = sp.getXMLReader();
              /* Create a new ContentHandler and apply it to the XML-Reader*/
              ExampleHandler myExampleHandler = new ExampleHandler();
              xr.setContentHandler(myExampleHandler);

              /* Parse the xml-data from our URL. */
              xr.parse(new InputSource(url.openStream()));
              /* Parsing has finished. */

              /* Our ExampleHandler now provides the parsed data to us. */
              List<ParsedExampleDataSet> parsedExampleDataSet = myExampleHandler.getParsedData();

              /* Set the result to be displayed in our GUI. */
              tv.setText(parsedExampleDataSet.toString());

         } catch (Exception e) {
              /* Display any Error to the GUI. */
              tv.setText("Error: " + e.getMessage());

         }
         /* Display the TextView. */
         this.setContentView(tv);
    }
}

ExampleHandler.java

代码语言:javascript
复制
package com.example.parsingxml;

import java.util.ArrayList;
import java.util.List;

import org.xml.sax.Attributes;
import org.xml.sax.SAXException;
import org.xml.sax.helpers.DefaultHandler;

public class ExampleHandler extends DefaultHandler{

     // ===========================================================
     // Fields
     // ===========================================================

     private StringBuilder mStringBuilder = new StringBuilder();

     private ParsedExampleDataSet mParsedExampleDataSet = new ParsedExampleDataSet();
     private List<ParsedExampleDataSet> mParsedDataSetList = new ArrayList<ParsedExampleDataSet>();

     // ===========================================================
     // Getter & Setter
     // ===========================================================

     public List<ParsedExampleDataSet> getParsedData() {
          return this.mParsedDataSetList;
     }

     // ===========================================================
     // Methods
     // ===========================================================

     /** Gets be called on opening tags like:
      * <tag>
      * Can provide attribute(s), when xml was like:
      * <tag attribute="attributeValue">*/
     @Override
     public void startElement(String namespaceURI, String localName, String qName, Attributes atts) throws SAXException {
        if (localName.equals("PhonebookEntry")) {
            this.mParsedExampleDataSet = new ParsedExampleDataSet();
        }

     }

     /** Gets be called on closing tags like:
      * </tag> */
     @Override
     public void endElement(String namespaceURI, String localName, String qName)
               throws SAXException {
          if (localName.equals("PhonebookEntry")) {
               this.mParsedDataSetList.add(mParsedExampleDataSet);
          }else if (localName.equals("firstname")) {
               mParsedExampleDataSet.setfirstname(mStringBuilder.toString().trim());
          }else if (localName.equals("lastname"))  {
              mParsedExampleDataSet.setlastname(mStringBuilder.toString().trim());
          }else if(localName.equals("Address"))  {
              mParsedExampleDataSet.setAddress(mStringBuilder.toString().trim());
          }else if(localName.equals("FileURL")){
              mParsedExampleDataSet.setFileURL(mStringBuilder.toString().trim());
          }
          mStringBuilder.setLength(0);
     }

     /** Gets be called on the following structure:
      * <tag>characters</tag> */
     @Override
    public void characters(char ch[], int start, int length) {
          mStringBuilder.append(ch, start, length);
    }
}

ParsedExampleDataSet.java

代码语言:javascript
复制
package com.example.parsingxml;

public class ParsedExampleDataSet {
    private String firstname = null;
    private String lastname=null;
    private String Address=null;
    private String FileURL=null;


    //Firstname
    public String getfirstname() {
         return firstname;
    }
    public void setfirstname(String firstname) {
         this.firstname = firstname;
    }

    //Lastname
    public String getlastname(){
        return lastname;
    }
    public void setlastname(String lastname){
        this.lastname=lastname;
    }

    //Address
    public String getAddress(){
        return Address;
    }
    public void setAddress(String Address){
        this.Address=Address;
    }

    //FileURL
    public String getFileURL(){
        return FileURL;
    }
    public void setFileURL(String FileURL){
        this.FileURL=FileURL;
    }

    public String toString(){
         return "Firstname: " + this.firstname + "\n" + "Lastname: " + this.lastname + "\n" + "Address: " + this.Address + "\nFile URL: " + this.FileURL + "\n\n";
    }

}

上面的代码正好有ff。产出:

代码语言:javascript
复制
[Firstname: Michael
Lastname: De Leon
Address: 5, Cat Street
File URL: http://android.mobishark.com/wp-content/uploads/2009/07/android-developers.png

,Firstname: John
Lastname: Smith
Address: 6, Dog Street
File URL: http://www.cellphonehits.net/uploads/2008/10/android_openmoko.jpg

,Firstname: Jember
Lastname: Dowry
Address: 7, Monkey Street
File URL: http://www.techdigest.tv/android.jpg

]

我之所以要这样做,是因为我有一个下载文件类,用于下载FileURL值中的文件。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2011-05-05 09:45:51

如果我正确理解了您的问题,那么您要做的就是在解析完成后循环遍历parsedExampleDataSet列表,并打印出其中包含的值。目前,您正在使用toString()方法打印列表的内容,这显然并不理想。好的。

我的建议是你考虑使用一个输尿管。Iterator是一个非常有用的对象,您可以从列表中获得它,以便迭代或遍历该列表。

http://developer.android.com/reference/java/util/ListIterator.html

我在这里要输入的不是完整的测试或工作代码,它只是给您提供了基本的想法。

首先定义一个Iterator:

代码语言:javascript
复制
Iterator i;

从列表中获取迭代器:

代码语言:javascript
复制
i = parsedExampleDataSet.iterator();

然后可以使用i.hasNext()查看Iterator是否有更多的元素,并使用i.next()获取每个元素。每次调用.next()都会导致Iterator移动到列表中的下一项,因此通常需要对项进行临时引用。如下所示:

代码语言:javascript
复制
ParsedExampleDataSet dataItem;
while(i.hasNext()){

 dataItem = i.next();
 someTextView1.setText(dataItem.getFileURL());
 anotherTextView.setText(dataItem.getAddress());

}

... etc.

显然,在while循环中如何处理从.getFileURL()、.getAddress等返回的字符串取决于您特定的UI。在我的小示例中,我将URL和地址覆盖到同一个TextView中;然而,它的目的只是演示在列表数据集上循环的概念。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5895402

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档