欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

自定义监听器,解析XML文档的步骤实现

程序员文章站 2022-09-20 12:06:33
JAXP的SAX支持SAX解析XML文档需求:解析出firstxml.xml文档的内容思路:在工程中引入Xerces-J集体解析器实现类jar包自定义事件监听器继承自DefaultHandler通过SAXParseFactory的newLnstance()方法创建SAX解析器工厂对象通过SAXParseFactory对象的newSAXParser()方法创建SAXPasrer对象调用SAXParser对象的parse()方法解析XML文档案例练习

JAXP的SAX支持

SAX解析XML文档

需求:解析出firstxml.xml文档的内容

思路:

  1. 在工程中引入Xerces-J集体解析器实现类jar包
  2. 自定义事件监听器继承自DefaultHandler
  3. 通过SAXParseFactory的newLnstance()方法创建SAX解析器工厂对象
  4. 通过SAXParseFactory对象的newSAXParser()方法创建SAXPasrer对象
  5. 调用SAXParser对象的parse()方法解析XML文档

案例练习

<?xml version="1.0" encoding="UTF-8"?>
<书籍列表>
	<计算机书籍>
		<书名>Java</书名>
		<作者>Kilig</作者>
		<价格>23.5$</价格>
	</计算机书籍>
	<计算机书籍>
		<书名>C++</书名>
		<作者>Berry</作者>
		<价格>17.5$</价格>
	</计算机书籍>
</书籍列表>

首先加入我们的jar包,一会儿我回上传到资源处,然后右键Build Path

自定义监听器,解析XML文档的步骤实现

然后创建类,开始编写

自定义监听器,解析XML文档的步骤实现

此处需要我们创建类,需要注意新类所继承

自定义监听器,解析XML文档的步骤实现

在这儿我们需要重写一些方法:

自定义监听器,解析XML文档的步骤实现

自定义监听器,解析XML文档的步骤实现

1.ASXParse.java

package com.kilig.sax;

import java.io.IOException;

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

import org.xml.sax.SAXException;

import com.kilig.sax.header.Kilig;

public class SAXParse {

	public static void main(String[] args) throws ParserConfigurationException, SAXException, IOException {
//		创建SAX解析器工厂
		SAXParserFactory factory =SAXParserFactory.newInstance();
//		创建SAX解析器
		SAXParser parser =factory.newSAXParser();
//		开始解析XML文档
		parser.parse("/Users/kilig/Desktop/firstxml.xml", new Kilig());
		
	}

}

2.Kilig.java

package com.kilig.sax.header;

import javax.swing.plaf.synth.SynthOptionPaneUI;

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

public class Kilig extends DefaultHandler {
//  定义一个变量来保存当前正在处理的tag
	private String currentTag;
//	每当处理文本时触发该方法
	@Override
	public void characters(char[] ch, int start, int length) throws SAXException {
		// TODO Auto-generated method stub
			String content =new String(ch,start,length);
		if(content.trim().length()>0) {
			System.out.println("<"+currentTag+">元素的值是:"+content.trim());
		}
	}
	
// 解析文档结束时触发该方法
	@Override
	public void endDocument() throws SAXException {
		// TODO Auto-generated method stub
		System.out.println("解析文档结束");
	}
//	解析元素结束时触发该方法
	@Override
	public void endElement(String uri, String localName, String qName) throws SAXException {
		// TODO Auto-generated method stub
		System.out.println("处理元素结束"+qName);
	}
//	每当解析文档开始时触发该方法
	@Override
	public void startDocument() throws SAXException {
		// TODO Auto-generated method stub
		System.out.println("解析文档开始");
	}

	@Override
	public void startElement(String uri, String localName, String qName, Attributes attributes) throws SAXException {
		// TODO Auto-generated method stub
		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));
			}
		}
	}

	

}

运行看一看

自定义监听器,解析XML文档的步骤实现


SAX生成XML文档

需求:生成出firstxml.xml文档的内容

思路:

  1. 创建保存xml的结果流对象
  2. 获取sax生成工厂对象实例
  3. 获取sax生成处理者对象实例
  4. 获取sax生成器
  5. 生成文档以及文档中的元素

案例练习

package com.kilig.sax;

import java.io.File;

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.SAXException;
import org.xml.sax.helpers.AttributeListImpl;
import org.xml.sax.helpers.AttributesImpl;

public class BuildXMLMain {

	public static void main(String[] args) throws TransformerConfigurationException, SAXException {
		// TODO Auto-generated method stub
//		创建保存XML的结果流对象
		Result resultXML =new StreamResult(new File("/Users/kilig/Desktop/firstxml2.xml"));
//		获取sax生成工厂实例
		SAXTransformerFactory saxTransformerFactory =(SAXTransformerFactory) SAXTransformerFactory.newInstance();
//		获取SAX生成处理者对象实例
		TransformerHandler transformerHandler =saxTransformerFactory.newTransformerHandler();
		transformerHandler.setResult(resultXML);
//		获取SAX生成器
		Transformer trnaTransformr =transformerHandler.getTransformer();
		((Transformer) transformerHandler).setOutputProperty(OutputKeys.INDENT, "yes");
//		生成文档的开始
		transformerHandler.startDocument();
		AttributeListImpl attrlmpl =new AttributeListImpl();
		transformerHandler.startElement("", "", "书籍列表", (Attributes) attrlmpl);
//		第一本
		transformerHandler.startElement("", "", "计算机书籍", (Attributes) attrlmpl);
		transformerHandler.startElement("", "", "书名", (Attributes) attrlmpl);
		transformerHandler.characters("Java".toCharArray(), 0, "Java".length());
		transformerHandler.endElement("", "", "书名");
		
		transformerHandler.startElement("", "", "作者", (Attributes) attrlmpl);
		transformerHandler.characters("Kilig".toCharArray(), 0, "kilig".length());
		transformerHandler.endElement("", "", "作者");
		
		transformerHandler.startElement("", "", "价格", (Attributes) attrlmpl);
		transformerHandler.characters("25.8$".toCharArray(), 0, "25.8$".length());
		transformerHandler.endElement("", "", "价格");
		transformerHandler.endElement("", "", "计算机书籍");
//		第二本
		transformerHandler.startElement("", "", "计算机书籍", (Attributes) attrlmpl);
		transformerHandler.startElement("", "", "书名", (Attributes) attrlmpl);
		transformerHandler.characters("C++".toCharArray(), 0, "C++".length());
		transformerHandler.endElement("", "", "书名");
		
		transformerHandler.startElement("", "", "作者", (Attributes) attrlmpl);
		transformerHandler.characters("Berry".toCharArray(), 0, "Berry".length());
		transformerHandler.endElement("", "", "作者");
		
		transformerHandler.startElement("", "", "价格", (Attributes) attrlmpl);
		transformerHandler.characters("16.5$".toCharArray(), 0, "16.5$".length());
		transformerHandler.endElement("", "", "价格");
		transformerHandler.endElement("", "", "计算机书籍");
		
		transformerHandler.endElement("", "", "书籍列表");
//		告诉Handler文档生成结束
		transformerHandler.endDocument();
		System.out.println("XML文档生成成功!!!");
	}

}

自定义监听器,解析XML文档的步骤实现

 

 

 

 

本文地址:https://blog.csdn.net/Slovenia_groot/article/details/110224052

相关标签: Java Web java xml