Sax 解析 XMl

最近工作中遇到了解析xml文件问题,xpath < SAX < spring-oxm

遂记录下来

代码结构:


package com.example.demo.sax.common;

import java.util.ArrayList;
import java.util.List;

import com.example.demo.sax.model.User;
import lombok.Builder;
import org.xml.sax.Attributes;
import org.xml.sax.SAXException;
import org.xml.sax.helpers.DefaultHandler;

public class XmlParseHandler extends DefaultHandler {
// xml片段内容
private StringBuilder sb = new StringBuilder();
// 片段名称
private String strTag = "";
// 开始时间
long starTime;
// 结束时间
long endTime;
// 开始记录
private boolean bolStartRecordFlg = false;

public XmlParseHandler(String tag) {
this.strTag = tag;
}

/**
* 文档解析开始调用
*/
@Override
public void startDocument() throws SAXException {
starTime = System.currentTimeMillis();
System.out.println("开始读取文档:" + starTime);
}

/**
* 文档解析结束后调用
*/
@Override
public void endDocument() throws SAXException {
endTime = System.currentTimeMillis();
System.out.println("结束读取文档:" + endTime);
System.out.println("用时:" + (endTime - starTime));
}


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

if (qName.equals(strTag)) {
bolStartRecordFlg = true;
}
if (bolStartRecordFlg) {
sb.append("<" + qName + ">");
}

}

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

if (bolStartRecordFlg) {
sb.append("</" + qName + ">");
}
if (qName.equals(strTag)) {
bolStartRecordFlg = false;
//System.out.println(sb.toString());
doSomething(sb.toString());
sb.delete(0,sb.length());
}
}

@Override
public void characters(char[] ch, int start, int length) throws SAXException {
if(bolStartRecordFlg){
sb.append(new String(ch,start,length));
}
}

public void doSomething(String strXml){

}
}


package com.example.demo.sax.handler;

import com.example.demo.sax.common.XmlParseHandler;

import java.util.ArrayList;

public class Handler extends XmlParseHandler {
private ArrayList<String> arrayList ;

public Handler(ArrayList<String> arrayList, String tag) {
super(tag);
this.arrayList = arrayList;
}

@Override
public void doSomething(String strXml) {
arrayList.add(strXml);
}
}




package com.example.demo.sax;

import com.example.demo.sax.handler.Handler;
import org.springframework.context.annotation.Configuration;
import org.springframework.stereotype.Component;

import javax.xml.parsers.SAXParser;
import javax.xml.parsers.SAXParserFactory;
import java.util.ArrayList;

@Configuration
public class TestSAX {

private static String file= "D:\\WorkSpace\\sax\\src\\main\\resources\\xml\\users.xml";

public static void main(String[] args) throws Exception{
ArrayList<String> arrayList = new ArrayList<String>();
SAXParserFactory factory = SAXParserFactory.newInstance();
SAXParser parser = factory.newSAXParser();
parser.parse(file,new Handler(arrayList,"user"));
arrayList.toString();
}

}


pom文件
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>

<groupId>com.example.demo</groupId>
<artifactId>sax</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>jar</packaging>

<name>sax</name>
<description>Demo project for Spring Boot</description>

<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.0.3.RELEASE</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>

<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
<java.version>1.8</java.version>
</properties>

<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter</artifactId>
</dependency>

<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<optional>true</optional>
</dependency>

<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-oxm</artifactId>
<version>3.0.5.RELEASE</version>
</dependency>

<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope> </dependency> </dependencies> <build> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> </plugin> </plugins> </build></project>
 

猜你喜欢

转载自www.cnblogs.com/hanshaowu/p/9277671.html