加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

解析XML数据

发布时间:2020-12-16 00:18:19 所属栏目:百科 来源:网络整理
导读:需要解析的XML数据:?xml version="1.0" encoding="utf-8"?books book id1001/id nameThinking In Java/name price80.00/price /book book id1002/id nameCore Java/name price90.00/price /book book id1003/id nameHello,Android/name price100.00/price /
需要解析的XML数据:
<?xml version="1.0" encoding="utf-8"?>
<books>
     <book>
          <id>1001</id>
          <name>Thinking In Java</name>
          <price>80.00</price>
     </book>
     <book>
          <id>1002</id>
          <name>Core Java</name>
          <price>90.00</price>
     </book>
     <book>
          <id>1003</id>
          <name>Hello,Android</name>
          <price>100.00</price>
     </book>
</books>

创建XML文件包含的属性的对象
public class Book {
    private int id;
    private String name;
    private float price;

    public int getId(int i) {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public float getPrice() {
        return price;
    }

    public void setPrice(float price) {
        this.price = price;
    }
//重写toString方法将这些数据转为字符串返回
    @Override
    public String toString() {
        return "id:"+id+",name:"+name+",price"+price;
    }
}
//创建接口解析器需要实现接口
public interface BookParser {
    //解析输入流得到book对象集合
    public List<Book> parse(InputStream is) throws Exception;
    //序列化book对象集合得到XML形式字符串
    public String serialize(List<Book> books)throws Exception;
}
//实现接口 使用android解析XML使用的pull方法
public class PullBookParse implements BookParser {
//实现讲XML解析得到数据对象方法
    @Override
    public List<Book> parse(InputStream is) throws Exception {
        List<Book> books=null;
        Book book=null;
        XmlPullParser parser= Xml.newPullParser();//由android.util.Xml创建一个XmlPullParser实例  
        parser.setInput(is,"utf-8");//设置输入流 并指明编码方式  
        int eventType=parser.getEventType();
        while (eventType!=XmlPullParser.END_DOCUMENT){
            switch (eventType){
                case XmlPullParser.START_DOCUMENT:
                    books=new ArrayList<Book>();
                    break;
                case XmlPullParser.START_TAG:
                    if (parser.getName().equals("book")){
                        book=new Book();
                    }else if (parser.getName().equals("id")){
                        eventType=parser.next();
                        book.setId(Integer.parseInt(parser.getText()));
                    }else if (parser.getName().equals("name")){
                        eventType=parser.next();
                        book.setName(parser.getText());
                    }else if (parser.getName().equals("price")){
                        eventType=parser.next();
                        book.setPrice(Float.parseFloat(parser.getText()));
                    }
                    break;
                case XmlPullParser.END_TAG:
                    if(parser.getName().equals("book")){
                        books.add(book);
                        book=null;
                    }
                  break;
            }
            eventType=parser.next();
        }
        return books;
    }
//实现讲数据对象转换为XML
    @Override
    public String serialize(List<Book> books) throws Exception {
        XmlSerializer serializer=Xml.newSerializer();//由android.util.Xml创建一个XmlSerializer实例  
        StringWriter writer=new StringWriter();
        serializer.setOutput(writer);//设置输出方向为writer
        serializer.startDocument("UTF-8",true);
        serializer.startTag("","book");
        for (Book book:books){
            serializer.startTag("","book");
            serializer.attribute("","id",book.getId(1)+"");

            serializer.startTag("","name");
            serializer.text(book.getName());
            serializer.endTag("","name");

            serializer.startTag("","price");
            serializer.text(book.getPrice()+"");
            serializer.endTag("","price");

            serializer.endTag("","book");
        }
        serializer.endTag("","books");
        serializer.endDocument();
        return writer.toString();
    }
}
//在MainActivity中写
public class MyActivity extends Activity {
    private Button button;
    private PullBookParse parser=new PullBookParse();
    private TextView textView;
    List<Book> books=null;
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);

        textView=(TextView)findViewById(R.id.onetext);
        button=(Button)findViewById(R.id.readbutton);
        button.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                InputStream is=null;
                String str=null;
                Log.e(">>>>>>>>onclick>>>>>>>",">>>>>>>>onclick>>>>>>>");
                try {
                    Log.e("s","aaa");
                 is=getAssets().open("book.xml");
                    books=parser.parse(is);
                    Log.e("book",books+"");
                    Log.e("is",is+"");
                    } catch (Exception e) {
                        e.printStackTrace();
                    }
                for (Book book:books){
                    Log.e("TGA",book.toString());
                    str+=book.toString();
                    textView.setText(str);
                }
                }
        });
    }
}
//显示的XML布局需要以下两个控件:
    <TextView
            android:id="@+id/onetext"
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:text="Hello World,MyActivity"
            />
    <Button
            android:id="@+id/readbutton"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:text="readButton"/>


(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读