您的位置:首页 > 编程语言 > Java开发

javaIO--通过SAX方式解析xml文件简例

2015-10-14 11:51 513 查看
//先创建的xml文件

<?xml version="1.0"  encoding="utf-8"?>

<bookstore>
<book id="1">
<name>三体</name>
<author>刘慈欣</author>
<year>2014</year>
</book>

<book id="2">
<name>无情剑</name>
<author>古龙</author>
<year>1995</year>
</book>

</bookstore>
//主类的执行代码

package com.xml;

import javax.xml.parsers.ParserConfigurationException;
import javax.xml.parsers.SAXParser;
import javax.xml.parsers.SAXParserFactory;

import org.xml.sax.SAXException;
import org.xml.sax.SAXParseException;

public class Sax {

//通过SAX方式解析xml文件
public static  void jiexi() throws Exception{
SAXParserFactory factory=SAXParserFactory.newInstance();
SAXParser p=factory.newSAXParser();
hand h= new  hand();
//创建一个hander对象
p.parse("books.xml", h);
}

public static void main(String[] args) throws Exception{
jiexi();
}

}


//重写继承自DefaultHandler类中的一些方法,如下:

<span style="font-size:24px;">package com.xml;

import org.xml.sax.Attributes;
import org.xml.sax.SAXException;
import org.xml.sax.helpers.DefaultHandler;

public class hand extends DefaultHandler {
int bookindex=1;
//重写遍历xml的开始标签和结束标签
@Override
public void startElement(String uri, String localName, String qName,
Attributes attributes) throws SAXException {
// TODO Auto-generated method stub
super.startElement(uri, localName, qName, attributes);
//当属性名为book时开始解析
if(qName.equals("book")){
System.out.println("---开始对第"+bookindex+"书进行解析---");
int a=attributes.getLength();
//输出属性名:
System.out.println("属性名为:"+qName);
//遍历属性
for(int i=0;i<a;i++){
System.out.println("属性值为:"+attributes.getValue(i));
}
}else{

if(!qName.equals("bookstore")){
System.out.print("节点名为:"+qName+"   ");
}
}
}
@Override
public void endElement(String uri, String localName, String qName)
throws SAXException {
// TODO Auto-generated method stub
super.endElement(uri, localName, qName);
if(qName.equals("book")){
System.out.println("---结束对第"+bookindex+"书进行解析---");
bookindex++;
}
}
</span><span style="font-size:32px;">//重写开始解析和结束解析的方法</span><span style="font-size:24px;">
@Override
public void startDocument() throws SAXException {
// TODO Auto-generated method stub
super.startDocument();
System.out.println("开始解析");
}
@Override
public void endDocument() throws SAXException {
// TODO Auto-generated method stub
super.endDocument();
System.out.println("结束解析");
}
/* (non-Javadoc)
* @see org.xml.sax.helpers.DefaultHandler#characters(char[], int, int)
*/
@Override
public void characters(char[] ch, int start, int length)
throws SAXException {
// TODO Auto-generated method stub
super.characters(ch, start, length);
String str= new  String(ch, start, length);
//如果去掉空格部为空
if(!str.trim().equals("")){
System.out.println("节点值为:"+str);
}
}
}
</span>
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: