xml之sax解析
发布时间:2020-12-16 00:11:14 所属栏目:百科 来源:网络整理
导读:SAX: SAX解析的原理: 采用事件驱动,边读边解析 javax.xml.parsers包里面 SAXParser 实例通过SAXParserFactory.newSAXParser()获得 -parse(File f,DefaultHandler dh)两个参数xml路径,和事件处理器 SAXParserFactory 实例通过newInstance()获得 startElem
SAX:
SAX解析的原理: 采用事件驱动,边读边解析javax.xml.parsers包里面 SAXParser 实例通过SAXParserFactory.newSAXParser()获得 -parse(File f,DefaultHandler dh)两个参数xml路径,和事件处理器 SAXParserFactory 实例通过newInstance()获得 startElement(String url,String localName,String qName,Attributes attributes) character(char[] ch,int start,int length) ensElement(String uri,String qName) 当解析到开始标签的时候,自动执行startElement()方法 当解析到文本的时候,自动执行character()方法 当解析到结束标签的时候,自动执行到endElement()方法 使用jaxp的sax方式解析xml: 1. sax可以很方便的实现xml的查询 执行parse(File f,DefaultHandler dh)方法 自定义一个类继承DefaultHandler,重写DEfaultHandler里面的3个方法 2.获取所有name元素的值: 定义一个成员变量flag = false; 判断startElement()方法里是否含有name元素,如果是name元素,把flag设置成true 如果flag是true,在character()方法里面打印内容 当执行到endElement()方法时,把flag设置成false 3.获取第一个name元素的值: 定义一个成员变量:index = 1 在结束方法endElement()的时候,index++ 想要打印出第一个name元素的值,在character里面判断,flag == true && index == 1,再打印内容
<?xml version="1.0" encoding="UTF-8"?> <person> <p1> <name>张三</name> <age>20</age> </p1> <p1> <name>李四</name> <age>23</age> </p1> </person>
/**使用jaxp的sax方式解析xml * 1.创建解析器工厂 * 2.创建解析器 * 3.执行parse()方法 * 4.自定义一个类,继承DefaultHandler * 5.重写DefaultHandler类里面的3个方法 * @ProjectName:xml * @ClassName:TestSax * @author xkf * @email 2547951466@qq.com * @date 2015年9月19日 * @Description:无 */ public class TestSax { public static void main(String[] args) { try { // test(); getAllValue(); } catch (Exception e) { e.printStackTrace(); } } /**获取所有的name元素的值 * @Title:getAllValue * @Description: * @return void */ public static void getAllValue() throws Exception{ SAXParserFactory saxParserFactory = SAXParserFactory.newInstance(); SAXParser parser = saxParserFactory.newSAXParser(); parser.parse("src/person2.xml",new MyDefaultHandler2()); } /**使用sax查询xml * @Title:test * @Description: * @throws Exception * @return void */ public static void test() throws Exception { //创建解析器工厂 SAXParserFactory saxParserFactory = SAXParserFactory.newInstance(); //创建解析器 SAXParser saxParser = saxParserFactory.newSAXParser(); //执行parse()方法 saxParser.parse("src/person2.xml",new MyDefaultHandler()); } } class MyDefaultHandler extends DefaultHandler{ @Override public void startElement(String uri,Attributes attributes) throws SAXException { System.out.print("<" + qName + ">"); } @Override public void characters(char[] ch,int length) throws SAXException { System.out.print(new String(ch,start,length)); } @Override public void endElement(String uri,String qName) throws SAXException { System.out.print("</" + qName + ">"); } } class MyDefaultHandler2 extends DefaultHandler{ boolean flag = false; int index = 1;//这里设置一个index变量,用于记录索引 @Override public void startElement(String uri,Attributes attributes) throws SAXException { //判断qName是否是name元素 if("name".equals(qName)){ flag = true; } } @Override public void characters(char[] ch,int length) throws SAXException { //当flag是true时,表示解析到所有name元素 //当name == 1的时候,表示值获取第一个name元素 if(flag == true && index == 2){ System.out.println(new String(ch,length)); } } @Override public void endElement(String uri,String qName) throws SAXException { //把flag设置成false,表示name元素结束 if("name".equals(qName)){ flag = false; index++; } } } (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |