java sax生成xml报文_SAX解析和生成XML文档

一、前言

SAX操作xml是基于事件来完成的,自己只负责调用解析的方法,然后具体解析操作都是交给DefaultHandler处理者来完成的,总的来说使用SAX解析和生成xml文档还是比较方便的 。

二、准备条件

因为SAX是jdk自带的解析方式,所以不用添加jar包引用。

三、使用SAX实战

1、解析xml文档

实现思路:

<1>先由SAXParserFactory这个工厂的实例生产一个SAXParser解析器;

<2>然后根据读取的xml路径,传递给SAXParser这个解析器,再调用parse()方法;

<3>在parse()方法中需要传递DefaultHandler这个类的扩展类的实例,因为它才会真正去一步步去解析xml文档的;

<4>在DefaultHandler扩展类中需要重写startDocument(),endDocument()等等方法,因为他们方法内部有返回的具体文档的结果。

具体代码如下:

import java.io.BufferedOutputStream;

import java.io.File;

import java.io.FileInputStream;

import java.io.FileNotFoundException;

import java.io.FileOutputStream;

import java.io.IOException;

import java.io.InputStream;

import java.util.ArrayList;

import java.util.List;

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.Attributes;

import org.xml.sax.InputSource;

import org.xml.sax.SAXException;

import org.xml.sax.helpers.AttributesImpl;

import org.xml.sax.helpers.DefaultHandler;

/**

* 使用SAX操作xml的简单例子

* @author Administrator

*

*/

public class SAXOperateXmlDemo {

public void parseXml01(){

String xmlPath = "D:\\project\\dynamicWeb\\src\\resource\\user01.xml";

String xmlName = xmlPath.substring(xmlPath.lastIndexOf("\\"));

try {

//获取SAX分析器的工厂实例,专门负责创建SAXParser分析器

SAXParserFactory saxParserFactory = SAXParserFactory.newInstance();

//获取SAXParser分析器的实例

SAXParser saxParser = saxParserFactory.newSAXParser();

//和其他解析方式一样,也要间接通过InputStream输入流对象获取xml信息

//1、直接指定绝对路径获取文件输入流对象

//InputStream inputStream = new FileInputStream(xmlPath);

//2、使用类的相对路径查找xml路径

//InputStream inputStream = this.getClass().getResourceAsStream(xmlName);

//3、也可以指定路径完成InputStream输入流的实例化操作

InputStream inputStream = new FileInputStream(new File(xmlPath));

//4、使用InputSource输入源作为参数也可以转换xml

//InputSource inputSource = new InputSource(inputStream);

//解析xml文档

saxParser.parse(inputStream, new XmlSAXHandler01());//这里传递了自定义的XmlSAXHandler()管理者参数来解析xml,不像以前都是直接调用返回的Document对象

} catch (ParserConfigurationException e) {

e.printStackTrace();

} catch (SAXException e) {

e.printStackTrace();

} catch (FileNotFoundException e) {

e.printStackTrace();

} catch (IOException e) {

e.printStackTrace();

}

}

public static void main(String[] args) {

SAXOperateXmlDemo demo = new SAXOperateXmlDemo();

demo.parseXml01();

}

}

/**

* 解析SAX的处理者01

* @author Administrator

*

*/

class XmlSAXHandler01 extends DefaultHandler {

@Override

public void startDocument() throws SAXException {

System.out.println("---->startDocument() is invoked...");

super.startDocument();

}

@Override

public void endDocument() throws SAXException {

System.out.println("---->endDocument() is invoked...");

super.endDocument();

}

@Override

public void startElement(String uri, String localName, String qName, Attributes attributes) throws SAXException {

System.out.println("-------->startElement() is invoked...");

super.startElement(uri, localName, qName, attributes);

}

@Override

public void endElement(String uri, String localName, String qName) throws SAXException {

System.out.println("-------->endElement() is invoked...");

super.endElement(uri, localName, qName);

}

@Override

public void characters(char[] ch, int start, int length) throws SAXException {

System.out.println("------------>characters() is invoked...");

super.c

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值