XML解析——SAX方式
来源:互联网 发布:游戏狗软件 编辑:程序博客网 时间:2024/05/22 10:50
首先准备了一个xml文件
<stars><star id="1"><name>Kobe</name><team>Lakers</team><position>Shooting Guard</position></star><star id="2"><name>Curry</name><team>Warriors</team><position>Point Guard</position></star><star id="3"><name>Durant</name><team>Thunder</team><position>Small Forward</position></star></stars>
java Star实体
public class Star {private String mId;private String mName;private String mPosition;private String mTeam;public String getId() {return mId;}public void setId(String id) {mId = id;}public String getName() {return mName;}public void setName(String name) {mName = name;}public String getPosition() {return mPosition;}public void setPosition(String position) {mPosition = position;}public String getTeam() {return mTeam;}public void setTeam(String team) {mTeam = team;}@Overridepublic String toString() {return "Star [mId=" + mId + ", mName=" + mName + ", mPosition="+ mPosition + ", mTeam=" + mTeam + "]";}}
首先创建一个ContentHandler类继承DefaultHandler,并且重写他的五个方法
1、startDocument //在文档开始时调用
2、startElement //在开始解析某个节点开始时调用
3、characters //获取节点中的内容时调用
4、endElement // 完成某个节点的解析时调用
5、endDocument //完成整个文档解析时调用
具体代码
public class ContentHandler extends DefaultHandler {private ArrayList<Star> stars;private String content;Star star = null;public ArrayList<Star> getStars() {return stars;}@Overridepublic void startDocument() throws SAXException {//在文档开始的时候建立集合stars = new ArrayList<Star>();}@Overridepublic void startElement(String uri, String localName, String qName,Attributes attributes) throws SAXException {//如果开始的节点是star的话,就new一个Star对象,并获取到这个节点的属性id的值if ("star".equals(qName)) {star = new Star();star.setId(attributes.getValue(0));}}@Overridepublic void characters(char[] ch, int start, int length) {//获取到节点的内容content = new String(ch, start, length);}@Overridepublic void endElement(String uri, String localName, String qName)throws SAXException {//节点结束时调用//如果是name,team,position,就赋值if ("name".equals(qName)) {star.setName(content);} else if ("team".equals(qName)) {star.setTeam(content);} else if ("position".equals(qName)) {star.setPosition(content);//如果是star节点的结束,就将star实例加入到集合中,并将star=null} else if ("star".equals(qName)) {stars.add(star);star = null;}}@Overridepublic void endDocument() throws SAXException {}}
解析过程如图所示
解析工具已经准备好了,开始解析(解释见代码注释)
<span style="font-size:14px;">public class UtilPullXml {public static ArrayList<Star> getStars() {//创建ContentHandler对象ContentHandler handler = new ContentHandler();// 创建一个转换工厂SAXParserFactory factory = SAXParserFactory.newInstance();try {//通过工厂new一个SAXparser对象SAXParser parser = factory.newSAXParser();//获得到XMLreader对象XMLReader reader = parser.getXMLReader();//为XMLreader设置Handlerreader.setContentHandler(handler);//开始解析stars.xmlreader.parse(new InputSource(UtilPullXml.class.getClassLoader().getResourceAsStream("stars.xml")));} catch (Exception e) {// TODO Auto-generated catch blocke.printStackTrace();}//调用Content的getStars方法返回解析到的ArrayList<Star>数据return handler.getStars();}public static void main(String[] args) {ArrayList<Star> stars = getStars();//输出for (Star star : stars) {System.out.println(star);}}}</span>
运行后就可得到解析过的xml数据
tips:
加载资源的方法
UtilPullXml.class.getClassLoader().getResourceAsStream("stars.xml")
0 0
- XML解析——SAX方式
- xml—SAX解析
- SAX方式解析XML
- SAX方式解析XML
- XML解析-SAX方式
- Android XML解析学习——Sax方式
- Android XML解析学习——Sax方式(续)
- xml的解析方式——dom/sax、jdom、dom4j
- Android XML解析学习——Sax方式 .
- Android XML解析学习——Sax方式(续) .
- android中解析XML文件方式—DOM SAX PULL
- XML解析——SAX
- 【慕课笔记】3-1 应用SAX方式解析XML—使用SAX解析XML文件的开始和结束
- 【慕课笔记】3-2 应用SAX方式解析XML—使用SAX解析XML文件的节点属性
- XML解析补充---SAX方式
- android sax解析 xml方式
- SAX方式创建/解析xml
- 用sax方式解析xml
- 表格
- 深入浅出RxJava三--响应式的好处
- Unreal Cook Book:VR应用中的焦点目标拾取
- php中in_array需要注意的一点
- swift Image加载
- XML解析——SAX方式
- 深入了解Windows句柄到底是什么
- px、pt、ppi、dpi、dp、sp之间的关系
- scrollview嵌套listview运行后最先显示出来的位置不在顶部而是中间问题
- Java.net.PlainSocketImpl
- 深入浅出RxJava四-在Android中使用响应式编程
- iOS 最全动画教程(基础)
- Remove Duplicates from Sorted Array II
- MarkDown入门小记