使用jaxp的sax方式解析xml
sax方式不能实现增删改操作,只能做查询操作
打印出整个文档
执行parse方法,第一个参数xml路径,第二个参数是 事件处理器
创建一个类,继承事件处理器的类,重写里面的三个方法
获取到所有的name元素的值
- 定义一个成员变量 flag= false
- 判断开始方法是否是name元素,如果是name元素,把flag值设置成true
- 如果flag值是true,在characters方法里面打印内容
- 当执行到结束方法时候,把flag值设置成false
获取第一个name元素的值
案例:
<?xml version="1.0" encoding="utf-8" standalone="no"?> <person> <p1> <name>张三</name> <age>20</age> </p1> <p1> <name>李四</name> <age>30</age> </p1> <p1> <name>王五</name> <age>40</age> </p1> <p1> <name>赵六</name> <age>50</age> </p1> </person>
package com.java.xml; import java.io.IOException; import javax.xml.parsers.ParserConfigurationException; import javax.xml.parsers.SAXParser; import javax.xml.parsers.SAXParserFactory; import org.xml.sax.SAXException; public class TextSax { public static void main(String[] args) throws ParserConfigurationException,SAXException,IOException { /* * 1.创建解析器工厂 * 2.创建解析器 * 3.执行parse方法 * 4.自己创建一个类继承DefaultHandler * 5.重写类里面的三个方法 */ //创建解析器工厂 SAXParserFactory saxParserFactory = SAXParserFactory.newInstance(); //创建解析器 SAXParser saxParser = saxParserFactory.newSAXParser(); //执行parse方法 saxParser.parse("src/person.xml",new MyDefault()); } }
package com.java.xml; import org.xml.sax.Attributes; import org.xml.sax.SAXException; import org.xml.sax.helpers.DefaultHandler; /** * 实现获取所有的name元素的值 * @author itachi * */ public class MyDefault extends DefaultHandler { boolean flag = false; int idx = 1; @Override public void startElement(String uri,String localName,String qName,Attributes attributes) throws SAXException { //判断qname是否是name元素 if("name".equals(qName)) { flag = true; } } @Override public void endElement(String uri,String qName) throws SAXException { //把flag设置成false,表示name元素结束 if("name".equals(qName)) { flag = false; idx++; } } @Override public void characters(char[] ch,int start,int length) throws SAXException { //当flag值是true时候,表示解析到name元素,索引是1 if(flag == true && idx == 3) { System.out.println(new String(ch,start,length)); } } }