`

StaX incremental parsing

    博客分类:
  • StaX
阅读更多

import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.InputStream;
import java.util.ArrayList;
import java.util.Date;
import java.util.Iterator;
import java.util.List;

import javax.xml.stream.XMLEventReader;
import javax.xml.stream.XMLInputFactory;
import javax.xml.stream.XMLStreamException;
import javax.xml.stream.XMLStreamReader;
import javax.xml.stream.events.Attribute;
import javax.xml.stream.events.EndElement;
import javax.xml.stream.events.StartElement;
import javax.xml.stream.events.XMLEvent;

public class StaXParser {

	static final String ENTRY = "entry";
	static final String CANFORM = "canForm";
	static final String ABBREV = "abbrev";
	static final String SYNONYM = "depSynonym";

	static final String MONO = "mono";
	static final String CROSSREFER = "crossRefer";
	static final String KEYDC = "keyDC";

	@SuppressWarnings({ "unchecked", "null" })
	public List<SAPTerm> readConfig(String configFile) {

		List<SAPTerm> terms = new ArrayList<SAPTerm>();
		try {
			// First create a new XMLInputFactory
			XMLInputFactory inputFactory = XMLInputFactory.newInstance();
			// Setup a new eventReader
			InputStream in = new FileInputStream(configFile);
			XMLEventReader eventReader = inputFactory.createXMLEventReader(in);
			// Read the XML document
			SAPTerm term = null;
			SAPTermMono mono = null;
			SAPTermCrossRefer crossRefer = null;

			while (eventReader.hasNext()) {
				XMLEvent event = eventReader.nextEvent();

				if (event.isStartElement()) {
					// StartElement startElement = ;
					// If we have a item element we create a new item
					StartElement startElement = event.asStartElement();
					// If we have a item element we create a new item
					if (startElement.getName().getLocalPart() == (ENTRY)) {
						term = new SAPTerm();
						continue;
					}

					// mono
					if (startElement.getName().getLocalPart() == (MONO)) {
						mono = new SAPTermMono();
						continue;
						// event = eventReader.nextEvent();
					}

					if (startElement.getName().getLocalPart() == (SYNONYM)) {
						event = eventReader.nextEvent();
						mono.addDepSynonym(event.asCharacters().getData());
						continue;
						// event = eventReader.nextEvent();
					}

					if (startElement.getName().getLocalPart() == (ABBREV)) {
						event = eventReader.nextEvent();
						mono.addAbbrevs(event.asCharacters().getData());
						continue;
						// event = eventReader.nextEvent();
					}

					if (startElement.getName().getLocalPart() == (CROSSREFER)) {
						crossRefer = new SAPTermCrossRefer();
						continue;
						// event = eventReader.nextEvent();
					}
					if (startElement.getName().getLocalPart() == (CANFORM)) {
						event = eventReader.nextEvent();
						if (mono.getCanForm() == null) {
							mono.setCanForm(event.asCharacters().getData());
						} else {
							crossRefer.setCanForm(event.asCharacters()
									.getData());
						}
						continue;
					}
				}
				// If we reach the end of an item element we add it to the
				// list
				if (event.isEndElement()) {
					EndElement endElement = event.asEndElement();
					if (endElement.getName().getLocalPart() == (MONO)) {
						term.setMono(mono);
						continue;
					}
					if (endElement.getName().getLocalPart() == (CROSSREFER)) {
						term.addCrossRefers(crossRefer);
						continue;
					}
					if (endElement.getName().getLocalPart() == (ENTRY)) {
						terms.add(term);
						continue;
					}
				}

			}
		} catch (FileNotFoundException e) {
			e.printStackTrace();
		} catch (XMLStreamException e) {
			e.printStackTrace();
		}

		return terms;
	}

}
 
分享到:
评论

相关推荐

    stax-api.jar

    `stax-api.jar`是Java中用于处理XML流的STAX(Streaming API for XML)的API接口库,它提供了与XML数据交互的一套标准化接口。 STAX(Streaming API for XML)是一种低级别的XML解析方法,相比DOM(Document Object...

    stax-api 1.0.1

    STAX(Streaming API for XML)是Java平台上的一个XML处理API,它提供了对XML文档的事件驱动解析。与DOM(Document Object Model)不同,STAX不是加载整个XML文档到内存中形成一个树形结构,而是通过事件(如开始...

    stax-api-1.0-2

    **STAX API 1.0-2:XML处理的关键组件** STAX,全称为Streaming API for XML,是一种用于处理XML的Java API。STAX提供了一种流式处理XML文档的方法,与DOM(Document Object Model)相比,它更加高效且内存占用更低...

    stax-api-1.0.1、stax2-api-3.1.1、woodstox-core-asl-4.1.1

    STAX(Streaming API for XML)是一种用于处理XML的Java API,它提供了事件驱动的解析方式,使得开发者可以高效地读取和写入XML文档。在Java世界中,STAX提供了比DOM(Document Object Model)更高效的处理XML的方式...

    stax2-api-3.1.4-API文档-中英对照版.zip

    赠送jar包:stax2-api-3.1.4.jar; 赠送原API文档:stax2-api-3.1.4-javadoc.jar; 赠送源代码:stax2-api-3.1.4-sources.jar; 赠送Maven依赖信息文件:stax2-api-3.1.4.pom; 包含翻译后的API文档:stax2-api-...

    stax-ex-1.8.3.zip

    《STAX EX 1.8.3:深入解析Java XML处理库》 在Java编程领域,XML(Extensible Markup Language)作为一种数据交换和存储格式,广泛应用于各种应用场景。处理XML时,Java提供了多种API,其中STAX(Streaming API ...

    jaxb+stax+demo

    在"jaxb+stax+demo"的示例中,通常会展示如何结合JAXB和STAX来高效地解析和生成XML。具体步骤可能包括以下几点: 1. **定义Java类**:首先,我们需要创建一些Java类,这些类将代表XML文档中的元素和属性。JAXB使用...

    stax-api-1.0.1 java 操作 xml 文件 一个很好用的包

    STAX(Streaming API for XML)是Java平台上的一个XML处理API,它提供了高效且灵活的方式来读取和写入XML文档。STAX的核心理念是事件驱动,即解析XML时,每遇到一个XML元素或属性,都会触发一个相应的事件,程序通过...

    stax-ex-1.8.jar

    stax-ex-1.8.jarstax-ex-1.8.jarstax-ex-1.8.jar

    staxmate-with-stax2-1.3.0.jar包

    **StaxMate与STAX2 1.3.0.jar包详解** 在Java开发中,处理XML文档是一项常见的任务。为了高效地解析和生成XML,开发者通常会利用各种API,如DOM(Document Object Model)、SAX(Simple API for XML)和STAX...

    stax+jaxb进行xml解析

    在Java中,有多种方法可以解析XML,其中StAX(Streaming API for XML)和JAXB(Java Architecture for XML Binding)是两种常用的技术。本篇文章将详细探讨如何结合StAX和JAXB进行高效的XML解析。 StAX是一种事件...

    stax2-api-3.1.4.jar

    实现了特殊的XML验证,一般来说使用SAXParser来读入XML文件再进行验证,但是这里使 用了边写边验证的功能,如果是...是Stax2 API提供的功能 java转换json或xml,支持Java和Json格式的互转,同时也支持Java和XML的互转

    stax2-api-3.1.1.jar

    "stax2-api-3.1.1.jar"是一个Java库,主要用于XML解析,特别是采用了StAX 2.0规范的实现。这个jar包包含了StAX 2 API的接口和实现,使得开发人员能够利用其特性来读取和写入XML数据,而无需处理复杂的DOM树或SAX事件...

    用Stax组装及解析XML

    ### 使用StAX组装与解析XML #### 一、引言 在处理XML文档时,Java提供了多种工具和技术,包括DOM、SAX以及本文将重点讨论的Streaming API for XML(简称StAX)。StAX是一种用于读取和写入XML数据的事件驱动型API,...

    stax2-api-4.2.1.jar

    用来解析XML文件的jar包。Streaming API for XML (StAX) 的基于事件迭代器 API 无论在性能还是在可用性上都有其他 XML 处理方法所不及的独到之处。使用前请先解压

    stax2-api-3.1.1-sources.jar

    stax2-api-3.1.1-sources.jar文件,下载使用,用来解析XML文件的jar包。Streaming API for XML (StAX) 的基于事件迭代器 API 无论在性能还是在可用性上都有其他 XML 处理方法所不及的独到之处。

    java xml 4 种 解析xml 方法 sax jdom dom stAX

    为了处理XML文档,Java提供了多种解析方法,包括SAX(Simple API for XML)、JDOM(Java Document Object Model)、DOM(Document Object Model)以及stAX(Streaming API for XML)。下面将详细介绍这四种解析XML的...

    有用的Java工具—XML解析工具StAx

    StAX是一种基于事件驱动的解析器,它允许程序员通过逐个处理XML事件(如开始元素、结束元素、文本等)来读取和写入XML文档,这种方式相比DOM(Document Object Model)更加轻量级和高效。 **StAX的优势** 1. **低...

    java使用stax技术操作XML文档.doc

    Streaming API for XML (StAX) 是Java中处理XML的一种高效且灵活的标准,相较于DOM和SAX,它在性能和易用性上有显著优势。StAX是JSR-173的一部分,于2004年3月发布,最终被纳入JAXP 1.4,也将在Java 6中得到支持。 ...

Global site tag (gtag.js) - Google Analytics