`
zht1933
  • 浏览: 223463 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

StAX解析XML

    博客分类:
  • JAVA
阅读更多
Java代码 复制代码
  1. package com.xml.parseXml;   
  2.   
  3. import java.io.InputStream;   
  4.   
  5. import javax.xml.stream.XMLEventReader;   
  6. import javax.xml.stream.XMLInputFactory;   
  7. import javax.xml.stream.events.StartElement;   
  8. import javax.xml.stream.events.XMLEvent;   
  9.   
  10. import com.xml.bean.Address;   
  11. import com.xml.bean.ReadXmlFileStream;   
  12.   
  13. public class StAXParseXml {   
  14.     private static Address address = new Address();   
  15.   
  16.     public static void main(String[] args) {   
  17.   
  18.         long lasting = System.currentTimeMillis();   
  19.   
  20.         try {   
  21.             InputStream in = ReadXmlFileStream.getXmlFileStream();   
  22.   
  23.             XMLInputFactory xmlif = XMLInputFactory.newInstance();   
  24.             // 用于解析 XML 事件的顶层接口   
  25.             XMLEventReader reader = xmlif.createXMLEventReader(in);   
  26.             // 处理标记事件的基础事件接口   
  27.             XMLEvent event = null;   
  28.   
  29.             while (reader.hasNext()) {   
  30.                 event = reader.nextEvent();   
  31.                 if (event.isStartElement()) { // 起始元素   
  32.                     StartElement startElt = event.asStartElement();   
  33.                     if (startElt.getName().getLocalPart().equals("no")) {   
  34.                         address.setNo(reader.getElementText());   
  35.                     } else if (startElt.getName().getLocalPart().equals("addr")) {   
  36.                         address.setAddr(reader.getElementText());   
  37.                         System.out.println(address);   
  38.                     }   
  39.                 } else if (event.isCharacters()) { // 文本内容   
  40.                     // 相邻标记之间都是文本内容   
  41.                     System.out.println("解析的是文本内容:"  
  42.                             + event.asCharacters().getData());   
  43.                 } else if (event.isEndElement()) { // 结束元素   
  44.                     System.out.println("解析的是结束标记:"  
  45.                             + event.asEndElement().getName());   
  46.                 }   
  47.             }   
  48.         } catch (Exception e) {   
  49.             e.printStackTrace();   
  50.         }   
  51.         System.out.println("运行时间:" + (System.currentTimeMillis() - lasting)   
  52.                 + " 毫秒");   
  53.   
  54.     }   
  55.   
  56. }  
Java代码 复制代码
  1. package com.xml.parseXml;   
  2.   
  3. import java.io.InputStream;   
  4.   
  5. import javax.xml.stream.XMLEventReader;   
  6. import javax.xml.stream.XMLInputFactory;   
  7. import javax.xml.stream.events.StartElement;   
  8. import javax.xml.stream.events.XMLEvent;   
  9.   
  10. import com.xml.bean.Address;   
  11. import com.xml.bean.ReadXmlFileStream;   
  12.   
  13. public class StAXParseXml {   
  14.     private static Address address = new Address();   
  15.   
  16.     public static void main(String[] args) {   
  17.   
  18.         long lasting = System.currentTimeMillis();   
  19.   
  20.         try {   
  21.             InputStream in = ReadXmlFileStream.getXmlFileStream();   
  22.   
  23.             XMLInputFactory xmlif = XMLInputFactory.newInstance();   
  24.             // 用于解析 XML 事件的顶层接口   
  25.             XMLEventReader reader = xmlif.createXMLEventReader(in);   
  26.             // 处理标记事件的基础事件接口   
  27.             XMLEvent event = null;   
  28.   
  29.             while (reader.hasNext()) {   
  30.                 event = reader.nextEvent();   
  31.                 if (event.isStartElement()) { // 起始元素   
  32.                     StartElement startElt = event.asStartElement();   
  33.                     if (startElt.getName().getLocalPart().equals("no")) {   
  34.                         address.setNo(reader.getElementText());   
  35.                     } else if (startElt.getName().getLocalPart().equals("addr")) {   
  36.                         address.setAddr(reader.getElementText());   
  37.                         System.out.println(address);   
  38.                     }   
  39.                 } else if (event.isCharacters()) { // 文本内容   
  40.                     // 相邻标记之间都是文本内容   
  41.                     System.out.println("解析的是文本内容:"  
  42.                             + event.asCharacters().getData());   
  43.                 } else if (event.isEndElement()) { // 结束元素   
  44.                     System.out.println("解析的是结束标记:"  
  45.                             + event.asEndElement().getName());   
  46.                 }   
  47.             }   
  48.         } catch (Exception e) {   
  49.             e.printStackTrace();   
  50.         }   
  51.         System.out.println("运行时间:" + (System.currentTimeMillis() - lasting)   
  52.                 + " 毫秒");   
  53.   
  54.     }   
  55.   
  56. }  
package com.xml.parseXml;

import java.io.InputStream;

import javax.xml.stream.XMLEventReader;
import javax.xml.stream.XMLInputFactory;
import javax.xml.stream.events.StartElement;
import javax.xml.stream.events.XMLEvent;

import com.xml.bean.Address;
import com.xml.bean.ReadXmlFileStream;

public class StAXParseXml {
	private static Address address = new Address();

	public static void main(String[] args) {

		long lasting = System.currentTimeMillis();

		try {
			InputStream in = ReadXmlFileStream.getXmlFileStream();

			XMLInputFactory xmlif = XMLInputFactory.newInstance();
			// 用于解析 XML 事件的顶层接口
			XMLEventReader reader = xmlif.createXMLEventReader(in);
			// 处理标记事件的基础事件接口
			XMLEvent event = null;

			while (reader.hasNext()) {
				event = reader.nextEvent();
				if (event.isStartElement()) { // 起始元素
					StartElement startElt = event.asStartElement();
					if (startElt.getName().getLocalPart().equals("no")) {
						address.setNo(reader.getElementText());
					} else if (startElt.getName().getLocalPart().equals("addr")) {
						address.setAddr(reader.getElementText());
						System.out.println(address);
					}
				} else if (event.isCharacters()) { // 文本内容
					// 相邻标记之间都是文本内容
					System.out.println("解析的是文本内容:"
							+ event.asCharacters().getData());
				} else if (event.isEndElement()) { // 结束元素
					System.out.println("解析的是结束标记:"
							+ event.asEndElement().getName());
				}
			}
		} catch (Exception e) {
			e.printStackTrace();
		}
		System.out.println("运行时间:" + (System.currentTimeMillis() - lasting)
				+ " 毫秒");

	}

}

 

依赖的类:

1.Address .java

Java代码 复制代码
  1. package com.xml.bean;   
  2.   
  3. public class Address {   
  4.   
  5.     private String no;   
  6.     private String addr;   
  7.     /**  
  8.      * @return the no  
  9.      */  
  10.     public String getNo() {   
  11.         return no;   
  12.     }   
  13.     /**  
  14.      * @param no the no to set  
  15.      */  
  16.     public void setNo(String no) {   
  17.         this.no = no;   
  18.     }   
  19.     /**  
  20.      * @return the addr  
  21.      */  
  22.     public String getAddr() {   
  23.         return addr;   
  24.     }   
  25.     /**  
  26.      * @param addr the addr to set  
  27.      */  
  28.     public void setAddr(String addr) {   
  29.         this.addr = addr;   
  30.     }   
  31.     @Override  
  32.     public String toString() {   
  33.         return "编号:" + this.no + ",地址:" + this.addr;   
  34.     }   
  35.        
  36.        
  37. }  
Java代码 复制代码
  1. package com.xml.bean;   
  2.   
  3. public class Address {   
  4.   
  5.     private String no;   
  6.     private String addr;   
  7.     /**  
  8.      * @return the no  
  9.      */  
  10.     public String getNo() {   
  11.         return no;   
  12.     }   
  13.     /**  
  14.      * @param no the no to set  
  15.      */  
  16.     public void setNo(String no) {   
  17.         this.no = no;   
  18.     }   
  19.     /**  
  20.      * @return the addr  
  21.      */  
  22.     public String getAddr() {   
  23.         return addr;   
  24.     }   
  25.     /**  
  26.      * @param addr the addr to set  
  27.      */  
  28.     public void setAddr(String addr) {   
  29.         this.addr = addr;   
  30.     }   
  31.     @Override  
  32.     public String toString() {   
  33.         return "编号:" + this.no + ",地址:" + this.addr;   
  34.     }   
  35.        
  36.        
  37. }  
package com.xml.bean;

public class Address {

	private String no;
	private String addr;
	/**
	 * @return the no
	 */
	public String getNo() {
		return no;
	}
	/**
	 * @param no the no to set
	 */
	public void setNo(String no) {
		this.no = no;
	}
	/**
	 * @return the addr
	 */
	public String getAddr() {
		return addr;
	}
	/**
	 * @param addr the addr to set
	 */
	public void setAddr(String addr) {
		this.addr = addr;
	}
	@Override
	public String toString() {
		return "编号:" + this.no + ",地址:" + this.addr;
	}
	
	
}

 2.ReadXmlFileStream .java

Java代码 复制代码
  1. /**  
  2.  *   
  3.  */  
  4. package com.xml.bean;   
  5.   
  6. import java.io.InputStream;   
  7.   
  8. public class ReadXmlFileStream {   
  9.   
  10.     private static final String XML_FILE = "com/xml/bean/addresses.xml";   
  11.   
  12.     public static InputStream getXmlFileStream() {   
  13.         return Thread.currentThread().getContextClassLoader()   
  14.                 .getResourceAsStream(XML_FILE);   
  15.     }   
  16.   
  17. }  
Java代码 复制代码
  1. /**  
  2.  *   
  3.  */  
  4. package com.xml.bean;   
  5.   
  6. import java.io.InputStream;   
  7.   
  8. public class ReadXmlFileStream {   
  9.   
  10.     private static final String XML_FILE = "com/xml/bean/addresses.xml";   
  11.   
  12.     public static InputStream getXmlFileStream() {   
  13.         return Thread.currentThread().getContextClassLoader()   
  14.                 .getResourceAsStream(XML_FILE);   
  15.     }   
  16.   
  17. }  
/**
 * 
 */
package com.xml.bean;

import java.io.InputStream;

public class ReadXmlFileStream {

	private static final String XML_FILE = "com/xml/bean/addresses.xml";

	public static InputStream getXmlFileStream() {
		return Thread.currentThread().getContextClassLoader()
				.getResourceAsStream(XML_FILE);
	}

}

 

被解析的XML结构:

addresses.xml

Xml代码 复制代码
  1. <?xml version="1.0" encoding="UTF-8"?>  
  2. <addresses>  
  3.     <value>  
  4.         <no>A100</no>  
  5.         <addr>广州天河区天河路</addr>  
  6.     </value>  
  7.     <value>  
  8.         <no>A101</no>  
  9.         <addr>广州天河区五山路</addr>  
  10.     </value>  
  11. </addresses>  
Xml代码 复制代码
  1. <?xml version="1.0" encoding="UTF-8"?>  
  2. <addresses>  
  3.     <value>  
  4.         <no>A100</no>  
  5.         <addr>广州天河区天河路</addr>  
  6.     </value>  
  7.     <value>  
  8.         <no>A101</no>  
  9.         <addr>广州天河区五山路</addr>  
  10.     </value>  
  11. </addresses> 
分享到:
评论

相关推荐

    stax 解析xml demo project

    STAX解析XML的过程是通过事件驱动的,即在解析XML时,解析器会触发一系列事件,如遇到元素开始、元素结束、文本节点等,开发者注册监听这些事件,然后在事件触发时进行相应的处理。相比于DOM(Document Object ...

    用Stax组装及解析XML

    使用StAX解析XML文档则需要借助`XMLInputFactory`和`XMLStreamReader`类完成。下面是一个简单的例子: ```java XMLInputFactory factory = XMLInputFactory.newInstance(); XMLStreamReader reader = factory....

    Stax组装及解析XML的例子

    Axis2在性能上的提升也得益于采用StAX解析XML。 总之,StAX提供了一种高效、低内存开销的方式来处理XML,尤其适用于处理大型XML文档和需要高性能的应用场景。通过组装和解析XML,开发人员可以灵活地在应用程序之间...

    kettle转换xml(XML Input Stream (StAX))

    这个实例展示了如何使用StAX解析XML并将其数据写入目标系统。 总结来说,Kettle的XML Input Stream (StAX) 提供了一种高效、内存友好的方式来处理XML数据。通过合理配置,我们可以轻松地从XML文件中提取数据,然后...

    kettle解析xml多层分组嵌套数据,StAX方法,完整解析案例(包含xml文件以及ktr文件)

    kettle 解析xml数据,xml多层分组嵌套,xml stax方法,完整解析案例使用(包含xml文件以及ktr文件)。ETL大数据迁移,数据清洗。XML Input Stream (StAX) 方法

    java解析xml例子

    以下是一个使用StAX解析XML的例子: ```java import java.io.FileInputStream; import javax.xml.stream.XMLInputFactory; import javax.xml.stream.XMLStreamConstants; import javax.xml.stream.XMLStreamReader;...

    stax+jaxb进行xml解析

    1. **StAX解析流程**: - 创建XMLInputFactory实例,这是解析XML的起点。 - 使用XMLInputFactory创建XMLStreamReader,这是读取XML事件的对象。 - 通过XMLStreamReader逐个处理事件,如StartElement、EndElement...

    java txt文件解析xml格式添加到数据库

    2. 使用StAX解析XML: StAX允许程序以迭代方式处理XML,可以逐个读取事件,如下所示: ```java import javax.xml.stream.XMLInputFactory; import javax.xml.stream.XMLStreamConstants; import javax.xml.stream....

    java通用解析XML工具类

    以下是一个使用StAX解析XML的示例: ```java import javax.xml.stream.XMLInputFactory; import javax.xml.stream.XMLStreamConstants; import javax.xml.stream.XMLStreamReader; import java.io.File; public ...

    kettle 解析xml xml文档,配合kettle 解析xml stax方法,完整解析案例使用

    与上一个版本一起使用可以可以起到提高效率的目的。本人解析xml的真实文档

    java大作业xml解析

    - 如何使用DOM、SAX或StAX解析XML - 如何处理XML中的命名空间 - 如何在Java对象和XML之间进行映射(如JAXB) 在实践中,你可能还会遇到编码问题、XML验证(使用DTD或XSD)、XPath用于查询XML数据,以及XML的序列化...

    java中解析xml

    以下是一个使用StAX解析XML的例子: ```java import javax.xml.stream.XMLInputFactory; import javax.xml.stream.XMLStreamConstants; import javax.xml.stream.XMLStreamReader; import java.io.FileInputStream;...

    java解析XML示例代码

    以上三种方法分别展示了DOM、SAX和StAX解析XML文件的基本用法。根据实际需求和文件大小,你可以选择最适合的解析方式。在处理XML文件时,务必注意处理异常,确保代码的健壮性。此外,还可以使用第三方库,如JAXB...

    xml的读写,自动生成xml,解析xml 源代码

    5. StAX解析XML: ```java import javax.xml.stream.XMLInputFactory; import javax.xml.stream.XMLStreamConstants; import javax.xml.stream.XMLStreamReader; import java.io.FileInputStream; XMLInputFactory ...

    xml入门到java解析

    总结,学习XML与Java解析XML,你需要掌握XML的基本语法和结构,以及在Java中使用DOM、SAX和StAX解析XML的方法。此外,XPath和XSLT是处理和转换XML的重要工具,也值得深入学习。在实际项目中,根据需求和性能考虑选择...

    java 解析xml 多级

    Java作为一种广泛使用的后端编程语言,提供了多种方式来解析XML文档,使得处理多级嵌套的数据变得可能。本文将详细讲解如何在Java中解析XML,特别是针对多级结构的情况。 首先,Java提供了两种主要的API来处理XML:...

    Java_XML生成与解析的四种方法

    #### 四、StAX解析XML文档 ##### 1. StAX简介 StAX(Streaming API for XML)是一种新的基于流的XML解析API,它结合了SAX和DOM的优点,提供了一种高效的XML处理方式。与SAX相比,StAX提供了更多的控制机制;与DOM...

    替换dom4j中的xml解析

    以下是使用SAX和StAX解析XML的基本步骤: 1. **SAX解析**: - 创建`DefaultHandler`的子类并重写关键方法,如`startElement`,`endElement`和`characters`。 - 使用`SAXParserFactory`创建`SAXParser`实例。 - ...

    使用JDOM解析XML文件

    本篇文章将深入探讨如何使用JDOM解析XML文件。 首先,我们需要理解JDOM的基本结构。JDOM通过Document对象表示整个XML文档,Element代表XML元素,Attribute表示元素属性,Text表示元素内的文本内容。这些类构成了...

Global site tag (gtag.js) - Google Analytics