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

java--通过sax方式解析xml文件的简单实例

2015-10-18 09:36 761 查看
1.重写的继承自DefaultHandler的方法,部分代码如下:

@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

if (qName.equals("name")){
System.out.println("-------------------"+value);
b.setName(value);
System.out.println("添加成功");
} if(qName.equals("author")){
b.setAuthor(value);
} if(qName.equals("year")){
b.setYear(value);
}

super.endElement(uri, localName, qName);

if(qName.equals("book")){
System.out.println("---结束对第"+bookindex+"书进行解析---");

booklist.add(b);
//new 一下,清空已有的对象属性
b= new book();
System.out.println("添加的书的名字:"+b.getName());

bookindex++;
}
}
//重写开始解析和结束解析的方法
@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);
value= new  String(ch, start, length);
//如果去掉空格部为空
if(!value.trim().equals("")){

System.out.println("节点值为:"+value);

}
}
解析方法如下:

public  static void createXml() throws Exception{
ArrayList<book>  booklist=jiexi();
//开始创建xml文件,前几步都是一样的
SAXTransformerFactory stf=(SAXTransformerFactory)SAXTransformerFactory.newInstance();
TransformerHandler hander=stf.newTransformerHandler();
//得到一个Transformer对象
Transformer tf=hander.getTransformer();
//然后进行一些xml文件的设置
//设置换行
tf.setOutputProperty(OutputKeys.INDENT, "yes");
//设置xml文件的字符编码
tf.setOutputProperty(OutputKeys.ENCODING, "utf-8");
//创建一个result对象并与hander进行关联
File file= new File("book2.xml");
if(!file.exists()){
file.createNewFile();
System.out.println("文件创建成功");
}
Result result = new StreamResult(new FileOutputStream(file));
hander.setResult(result);
//接下來利用hander对象对xml进行内容的编写
//先开始document
AttributesImpl attr= new AttributesImpl();
hander.startDocument();
hander.startElement("", "", "bookstore", attr);

//遍历booklist,并把它写入xml节点
int i=1;
for(book bo:booklist){
attr.clear();
//添加一个属性到attr
attr.addAttribute("", "", "id", "",i+"");
//i+""或者Integer.toString(i)将int转换成字符串
hander.startElement("", "", "book", attr);
//attr表示属性值

//当两本书的节点名不一样时,加一份判断,如果得到的值不为空并且去掉空格部位空时才进行添加,以下添加一样
if(bo.getName()!=null && !bo.getName().trim().equals("")){
attr.clear();
hander.startElement("", "", "name", attr);
//添加name中的文本
hander.characters(bo.getName().toCharArray(), 0, bo.getName().length());
hander.endElement("", "", "name");

}

//添加作者
attr.clear();
hander.startElement("", "", "author", attr);
hander.characters(bo.getAuthor().toCharArray(), 0,bo.getAuthor().length());
hander.endElement("", "", "author");

//添加出版年份
attr.clear();
hander.startElement("", "", "year", attr);
hander.characters(bo.getYear().toCharArray(), 0, bo.getYear().length());
hander.endElement("", "", "year");

//结束book节点
hander.endElement("", "", "book");
i++;

}
hander.endElement("", "", "bookstore");
hander.endDocument();
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: