解析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"/> (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |