XML解析

来源:互联网 发布:js tostring 方法 编辑:程序博客网 时间:2024/06/11 06:19

1.SAX解析,解析过程中返回遇到的标签名称,到达指定标签时触发不同的方法,继承DefaultHandler实现自己的解析过程
SAX解析是java内置的解析方法

/** * @author chendong * @内容:使用SAX对 xml进行解析,需要自定义handler java自带解析工具 */public class NewSaxPaser {     public static void main(String[] args) throws ParserConfigurationException,              SAXException, IOException {          SAXParserFactory f = SAXParserFactory.newInstance();          SAXParser parser = f.newSAXParser();          MySaxHandler h = new MySaxHandler();          FileInputStream fis = new FileInputStream("file/stu.xml" );          parser.parse(fis, h);     }}// 自定义handlerclass MySaxHandler extends DefaultHandler {     private List<Stu> list;     private Stu stu;     private String tagName;     private static void show(List<Stu> list) {           for (Stu s : list) {              System. out.println(s);          }     }     // 文档开始     @Override     public void startDocument() throws SAXException {           list = new ArrayList<>();     }     // 标签开始     @Override     public void startElement(String uri, String localName, String qName,              Attributes attributes) throws SAXException {           tagName = qName;           // 判断是不是Stu标签           if ( "stu".equals( tagName)) {               stu = new Stu();               // 判断是不是有属性值               if (attributes != null && attributes.getLength() > 0) {                    // 包含属性,加载属性                    for ( int i = 0; i < attributes.getLength(); i++) {                        String attrName = attributes.getQName(i);                         if ( "id".equals(attrName)) {                             String attrValue = attributes.getValue(i);                              stu.setId(attrValue);                        }                   }              }          }     }     // 文本处     @Override     public void characters( char[] ch, int start, int length)               throws SAXException {           if ( tagName == null)               return;          String data = new String(ch, start, length);           if (data == null || "".equals(data))               return;           if ( "name".equals( tagName)) {               stu.setName(data);          } else if ( "age".equals( tagName)) {               stu.setAge(Integer. parseInt(data));          }     }     // 标签结束     @Override     public void endElement(String uri, String localName, String qName)               throws SAXException {           if ( "stu".equals(qName)) {               list.add( stu);          }           tagName = null;     }     // 文档结束     @Override     public void endDocument() throws SAXException {           super.endDocument();           show(list);     }}

2.pull解析,解析过程中返回定义好的数值型

import java.io.FileInputStream;import java.io.IOException;import java.io.InputStream;import java.util.ArrayList;import java.util.List;import org.xmlpull.v1.XmlPullParser;import org.xmlpull.v1.XmlPullParserException;import org.xmlpull.v1.XmlPullParserFactory;import com.march.review.Stu;/* * 使用Pull解析完成对输入流的 xml解析 * 主要用法: //工厂 XmlPullParserFactory f = XmlPullParserFactory.newInstance(); // 解析器 XmlPullParser parser = f.newPullParser(); // 设置输入流 parser.setInput(is, "utf-8"); //获取当前标签类型 int event = parser.getEventType(); //标签名 String tag = parser.getName(); //标签属性的个数 parser.getAttributeCount() //标签属性名 parser.getAttributeName(i); //属性的值 parser.getAttributeValue(i); //标签内文本 parser.nextText(); //下一个标签类型 event =parser.next(); */public class NewPullpPaser {     public static void main(String[] args) throws IOException {          FileInputStream fis = new FileInputStream("file/stu.xml" );           Parse(fis);     }     //遍历xml文件     private static List<Stu> FillList(List<Stu> list, XmlPullParser parser)               throws XmlPullParserException, IOException {          Stu stu = null;           int event = parser.getEventType();           while (event != XmlPullParser. END_DOCUMENT) {               switch (event) {               // 文档开始,初始化集合               case XmlPullParser. START_DOCUMENT:                   list = new ArrayList<>();                    break;               // 标签开始,判断是什么标签               case XmlPullParser. START_TAG:                   String tag = parser.getName();                    if ( "stu".equals(tag)) {                        stu = new Stu();                         // 判断是否含有属性                         if (parser.getAttributeCount() > 0) {                              for ( int i = 0; i < parser.getAttributeCount(); i++) {                                  String attriName = parser.getAttributeName(i);                                   if ("id".equals(attriName)) {                                      String attriValue = parser.getAttributeValue(i);                                       stu.setId(attriValue);                                  }                             }                        }                   } else if ( "name".equals(tag)) {                        stu.setName(parser.nextText());                   } else if ( "age".equals(tag)) {                        stu.setAge(Integer. parseInt(parser.nextText()));                   }                    break;               // 标签结束,添加到集合中               case XmlPullParser. END_TAG:                    if ( "stu".equals(parser.getName()))                        list.add(stu);                    break;              }              event = parser.next();          }           return list;     }     private static void show(List<Stu> list) {           for (Stu s : list) {              System. out.println(s);          }     }     //设置输入流     public static List<Stu> Parse(InputStream is) throws IOException {          List<Stu> list = null;          XmlPullParserFactory f;           try {               // 工厂              f = XmlPullParserFactory. newInstance();               // 解析器              XmlPullParser parser = f.newPullParser();               // 设置输入流              parser.setInput(is, "utf-8");              list = FillList(list, parser);               show(list);          } catch (XmlPullParserException e) {               // TODO Auto-generated catch block              e.printStackTrace();          }           return list;     }}
0 0
原创粉丝点击