使用jaxp的sax方式解析xml
sax方式不能实现增删改操作,只能做查询操作
打印出整个文档
执行parse方法,第一个参数xml路径,第二个参数是 事件处理器
创建一个类,继承事件处理器的类,重写里面的三个方法
获取到所有的name元素的值
- 定义一个成员变量 flag= false
- 判断开始方法是否是name元素,如果是name元素,把flag值设置成true
- 如果flag值是true,在characters方法里面打印内容
- 当执行到结束方法时候,把flag值设置成false
获取第一个name元素的值
- 定义一个成员变量 idx=1
- 在结束方法时候,idx+1 idx++
- 想要打印出第一个name元素的值, 在characters方法里面判断,判断flag=true 并且 idx==1,在打印内容
案例:
<?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 localName, 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));
}
}
}