XML文件解析

package com.imooc.sax;

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

public class MyHanndler extends DefaultHandler{

		//定义一个变量来保存当前正在处理的tag
		private String currentTag;
		
		/* (非 Javadoc)
		 * 解析文档开始时触发该方法
		 */
		@Override
		public void startDocument() throws SAXException {
			// TODO 自动生成的方法存根
			System.out.println("解析文档开始时触发该方法");
		}

		/* (非 Javadoc)
		 * 解析文档结束时触发该方法
		 */
		@Override
		public void endDocument() throws SAXException {
			// TODO 自动生成的方法存根
			System.out.println("解析文档结束时触发该方法");
		}

		/* (非 Javadoc)
		 * 解析元素开始时触发该方法
		 */
		@Override
		public void startElement(String uri, String localName, String qName, Attributes attributes) throws SAXException {
			// TODO 自动生成的方法存根
			System.out.println("解析元素开始 "+qName);
			currentTag=qName;
			if(attributes.getLength()>0)
			{
				System.out.println("<"+currentTag+">元素的属性如下:");
				for(int i=0;i<attributes.getLength();i++) {
					System.out.println(attributes.getQName(i)+"--->"+attributes.getValue(i));
				}
			}
		}

		/* (非 Javadoc)
		 * 解析元素结束时触发该方法
		 */
		@Override
		public void endElement(String uri, String localName, String qName) throws SAXException {
			// TODO 自动生成的方法存根
			System.out.println("解析元素结束 "+qName);
		}

		/* (非 Javadoc)
		 * 每当处理文本数据时将触发该方法
		 */
		@Override
		public void characters(char[] ch, int start, int length) throws SAXException {
			// TODO 自动生成的方法存根
			String content=new String(ch, start, length);
		if(content.trim().length()>0) {
			System.out.println("<"+currentTag+">元素的值是:"+content.trim());
		}
		}
}

 

package com.imooc.sax;

import java.io.IOException;

import javax.xml.parsers.ParserConfigurationException;
import javax.xml.parsers.SAXParser;
import javax.xml.parsers.SAXParserFactory;
import javax.xml.transform.OutputKeys;
import javax.xml.transform.Result;
import javax.xml.transform.Transformer;
import javax.xml.transform.TransformerConfigurationException;
import javax.xml.transform.sax.SAXTransformerFactory;
import javax.xml.transform.sax.TransformerHandler;
import javax.xml.transform.stream.StreamResult;

import org.xml.sax.SAXException;
import org.xml.sax.helpers.AttributesImpl;

public class SAXParse {
	public static void main(String[] args) throws ParserConfigurationException, SAXException, IOException, TransformerConfigurationException {
		SAXParse a=new SAXParse();
		//a.read_xml();
		a.write_xml();
		
	}
	
	//解析XML
	public void read_xml() throws SAXException, IOException, ParserConfigurationException {
		// 创建SAX解析工厂
		SAXParserFactory factory=SAXParserFactory.newInstance();
		//创建SAX解析器
		SAXParser saxParse=factory.newSAXParser();
		//开始解析XML文档
		saxParse.parse("E://java_test/book.xml",new MyHanndler());
	}
	
	//写出XML
	public void write_xml() throws TransformerConfigurationException, SAXException {
		//创建保存XML的结果流对象
		Result result=new StreamResult("E://java_test/book2.xml");
		// 获取SAX工厂实例
		SAXTransformerFactory saxTransformerFactor= (SAXTransformerFactory) SAXTransformerFactory.newInstance();
		//获取SAX生成处理对象实例
		TransformerHandler transformerHandler=saxTransformerFactor.newTransformerHandler();
		transformerHandler.setResult(result);
		//获取SAX生成器
		Transformer transformer=transformerHandler.getTransformer();
		transformer.setOutputProperty(OutputKeys.INDENT, "yes");//允许生成额外的空格
		
		//生成文档的开始
		transformerHandler.startDocument();
		//创建属性对象,这里 我不加属性就设置空 ; attri.addAttribute(uri, localName, qName, type, value);
		AttributesImpl attri=new AttributesImpl();
		transformerHandler.startElement("", "","书籍列表",attri);
		transformerHandler.startElement("", "","计算机书籍", attri);
		transformerHandler.startElement("", "","书名", attri);
		transformerHandler.characters("JAVA思想".toCharArray(), 0, "JAVA思想".length());
		transformerHandler.endElement("", "", "书名");
		
		transformerHandler.startElement("", "","作者", attri);
		transformerHandler.characters("小王".toCharArray(), 0, "小王".length());
		transformerHandler.endElement("", "", "作者");
		
		transformerHandler.startElement("", "","价格", attri);
		transformerHandler.characters("79.00".toCharArray(), 0, "79.00".length());
		transformerHandler.endElement("", "", "价格");
		
		transformerHandler.endElement("", "", "计算机书籍");
		transformerHandler.endElement("", "", "书籍列表");
		
		//文档生成结束
		transformerHandler.endDocument();
	}
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值