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
- XML解析
- xml解析
- XML解析
- 解析XML
- xml解析
- 解析xml
- 解析xml
- xml解析
- XML解析
- xml解析
- XML解析
- xml解析
- xml解析
- xml解析
- xml解析
- xml解析
- 解析xml
- XML解析
- 创建第一个android应用
- Spring security安全认证框架
- TI BLE CC2541 关于Notification的设置及应用
- com.android.dx.cf.iface.ParseException: bad class file magic (cafebabe) or version (0034.0000)
- 在用户空间发生中断时,上下文切换的过程
- XML解析
- 12.4
- iOS常用手势识别器
- java寻找html文件中的标签
- 加密与解密
- Linux 系统内核空间与用户空间通信的实现与分析
- unity NGUI tutorial more events
- hdu 1198Farm Irrigation(并查集)
- zoj1074 To the Max