XML数据解析
来源:互联网 发布:新歌2016网络红歌情歌 编辑:程序博客网 时间:2024/06/03 18:20
<?xml version="1.0" encoding="UTF-8" ?> - <bookstore>- <book id="1"> <price>18</price> <year>1995</year> </book>- <book id="2"> <price>19</price> <year>1997</year> </book>- <book id="3"> <price>20</price> <year>2009</year> </book> </bookstore>
】 PULL方式
package com.kk;public class Book { private int id; private int price; private int year; public void setId(int id) { this.id = id; } public int getId() { return id; } public int getPrice() { return price; } public void setPrice(int price) { this.price = price; } public int getYear() { return year; } public void setYear(int year) { this.year = year; } @Override public String toString() { return "Book [id=" + id + ", price=" + price + ", year=" + year + "]"; }}
package com.kk;
import java.io.FileReader;
import java.util.ArrayList;
import java.util.List;
import org.xmlpull.v1.XmlPullParser;
import org.xmlpull.v1.XmlPullParserFactory;
public class Main {
public static void main(String[] args) { List<Book> l=getData(); for(Book b:l){ System.out.println(b); }}private static List<Book> getData() { Book b=null;//封装解析数据的对象 List<Book> l=new ArrayList<Book>();//存储book try { //创建解析工厂 XmlPullParserFactory factory=XmlPullParserFactory.newInstance(); //创建解析器 XmlPullParser parser=factory.newPullParser(); //指定解析文件 parser.setInput(new FileReader("kk.xml")); ////////////////开始解析////////////////////////////////// //获取事件 int enveType=parser.getEventType(); while(enveType!=XmlPullParser.END_DOCUMENT){ //获取标签名 String tag=parser.getName(); switch (enveType) { case XmlPullParser.START_DOCUMENT: break; case XmlPullParser.START_TAG: if("book".equals(tag)){ b=new Book(); //获取属性值 String id=parser.getAttributeValue(0); b.setId(Integer.parseInt(id)); }else if("price".equals(tag)){ String price=parser.nextText(); b.setPrice(Integer.parseInt(price)); }else if("year".equals(tag)){ String year=parser.nextText(); b.setYear(Integer.parseInt(year)); } break; case XmlPullParser.END_TAG: if("book".equals(tag)){ l.add(b); } break; } enveType=parser.next();//进入下一个事件 } } catch (Exception e) { e.printStackTrace(); } return l;}
}
<?xml version="1.0" encoding="UTF-8" ?> - <Books>- <book id="火影"> <name>JAVa</name> <price>13</price> </book>- <book id="2"> <name>C</name> <price>14</price> </book>- <book id="3"> <name>c#</name> <price>14</price> </book> </Books>
】 SAX方式解析
package com.kk;import java.io.IOException;import java.util.List;import javax.xml.parsers.ParserConfigurationException;import javax.xml.parsers.SAXParser;import javax.xml.parsers.SAXParserFactory;import org.xml.sax.SAXException;public class Main { public static void main(String[] args) { try { //创建解析器工厂 SAXParserFactory factory=SAXParserFactory.newInstance(); //创建解析器 SAXParser parser=factory.newSAXParser(); //解析指定文件 MyHandler hMyHandler=new MyHandler(); parser.parse("my.xml", hMyHandler); List<Book> l=hMyHandler.getL(); for(Book b:l){ System.out.println(b); } } catch (ParserConfigurationException e) { e.printStackTrace(); } catch (SAXException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } }}
package com.kk;
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 MyHandler extends DefaultHandler {
private Book book;// 用来封装解析的数据private List<Book> l;// 存储Book对象private String tag;//记录标签的名字public MyHandler() { l = new ArrayList<Book>();}public List<Book> getL() {//返回List集合 return l;}/** * 解析到文档开始调用 */@Overridepublic void startDocument() throws SAXException {}/** * 解析到文档结束调用 */@Overridepublic void endDocument() throws SAXException {}/** * 解析到开始标签调用 * qName:标签的名字 */@Overridepublic void startElement(String uri, String localName, String qName, Attributes attributes) throws SAXException { tag=qName; if("book".equals(qName)){//如果是book标签,表示读到一个新的元素 book=new Book(); if(attributes!=null){//标签有属性 for(int i=0;i<attributes.getLength();i++){ System.out.println(attributes.getQName(i));//输出属性 System.out.println(attributes.getValue(i));//输出属性值 } } }}
/**
* 解析到标签结束调用
*/
@Override
public void endElement(String uri, String localName, String qName)
throws SAXException {
tag=null;//如果不重置tag,此时tag记录的还是开始标签,在characters()方法中,就会进入选择语句,会报异常
if(“book”.equals(qName)){//如果是book标签,表示新元素解析完毕
l.add(book);//将book对象添加到集合中
}
}/** * 调用startElement()或者endElemen()后,调用该方法获取数据 * 】endElement的数据是空字符串 */@Overridepublic void characters(char[] ch, int start, int length) throws SAXException { String s=new String(ch,start,length);//获取数据 if("name".equals(tag)){ book.setName(s); }else if("price".equals(tag)){ book.setPrice(Integer.parseInt(s)); }}
}
“`
- oracle解析xml数据
- 解析XML格式数据
- Jdom 解析XML数据
- jquery 解析 xml数据
- xml数据解析
- xml数据的解析
- Android---解析XML数据
- xml形式数据解析
- xml数据解析
- XML数据解析
- js解析XML数据
- 解析XML数据
- iOS xml数据解析
- 解析XML数据
- xml数据解析
- XML数据的解析
- xml数据解析方法
- XML、JSON数据解析
- 关于三极管常用电路
- 尺度空间理论
- UITableViewCell分割线从最左边开始和分割线颜色设置
- 实现一组功能的步骤
- AngularJS-自定义指令
- XML数据解析
- Source命令
- [刷题]Rehashing
- 图像的矩特征
- JS中typeof与instanceof的区别
- Unity 游戏移植到 Windows10 之路 -- 环境搭建
- c++运算符重载
- Android自定义属性,format详解
- c# send mail