前端之家收集整理的这篇文章主要介绍了
利用JAXP的SAX方式对xml进行解析,
前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
import javax.xml.parsers.ParserConfigurationException;
import javax.xml.parsers.SAXParser;
import javax.xml.parsers.SAXParserFactory;
import org.junit.Test;
import org.xml.sax.Attributes;
import org.xml.sax.SAXException;
import org.xml.sax.helpers.DefaultHandler;
/**
* JAXP的SAX解析;
* @author 大蘑菇
*
*/
public class SAXTest {
@Test
public void demo1() throws Exception {
/**
* 1.创建解析器工厂
* 2、由工厂创建解析器
* 3.解析xml文档。 --- 绑定一个处理器
*/
SAXParserFactory factory = SAXParserFactory.newInstance();
SAXParser parser = factory.newSAXParser();
// 解析xml --- 绑定处理器
//获得第二个作者节点的内容;
parser.parse( "src/book.xml",new MyDefaultHandler());
}
}
/**
* 处理具体事件的handler
* @author 大蘑菇
*
*/
class MyDefaultHandler extends DefaultHandler {
private boolean flag = false;
private int idx = 1;//用来标记遇到的第几个作者节点
/**
* 遇到element节点;
*/
@Override
public void startElement(String uri,String localName,String qName,Attributes attributes) throws SAXException {
if ("作者" .equals(qName)) {
flag = true ;
}
}
/**
* element的内容;
*/
@Override
public void characters(char[] ch,int start,int length)
throws SAXException {
if (flag && idx == 2) { //将第二个作者节点的内容输出;
System. out.println(new String(ch,start,length));
}
}
/**
* element结束
*/
@Override
public void endElement(String uri,String qName)
throws SAXException {
if ("作者" .equals(qName)) {
flag = false ;
idx++;
}
}
}