java 对xml 基本操作

原创 2013年12月04日 10:27:19

XMLInputFactory 定义用于获取流的工厂的抽象实现

 

XMLStreamReader 接口允许转发 XML 和对 XML 的只读访问。它被设计为读取 XML 数据的最低层且最有效的方法。

XMLStreamReader 被设计为使用 next() 和 hasNext() 在 XML 上进行迭代。可以使用诸如 getEventType()、getNamespaceURI()、getLocalName() 和 getText() 之类的方法访问数据: 

next() 方法会使 reader 读取下一个解析事件。next() 方法返回一个整数,指示刚才读取的事件类型。 

 

 

访问xml一般操作步骤如下:

InputStream is = XMLTest.class.getClassLoader().getResourceAsStream("books.xml");
XMLInputFactory factory = XMLInputFactory.newFactory();
//下面是两种方式访问xml
//XMLStreamReader reader = factory.createXMLStreamReader(is);
XMLEventReader reader = factory.createXMLEventReader(is);

 

package hb.xml;

import java.io.IOException;
import java.io.InputStream;

import javax.xml.stream.EventFilter;
import javax.xml.stream.XMLEventReader;
import javax.xml.stream.XMLInputFactory;
import javax.xml.stream.XMLStreamConstants;
import javax.xml.stream.XMLStreamException;
import javax.xml.stream.XMLStreamReader;
import javax.xml.stream.events.XMLEvent;

import org.junit.Test;

public class XMLTest {
//books.xml存放的位置是在src目录下面
	InputStream is = XMLTest.class.getClassLoader().getResourceAsStream("books.xml");
	XMLInputFactory factory = XMLInputFactory.newFactory();

	@Test
	//根据节点类型访问XML里面的数据
	public void nodeTypeDemo() {
		try {
			XMLStreamReader reader = factory.createXMLStreamReader(is);
			while(reader.hasNext()) {
				int type = reader.next();
				//判断节点类型是否是开始或者结束或者文本节点,之后根据情况及进行处理
				if(type==XMLStreamConstants.START_ELEMENT) {
					String name = reader.getName().toString();
					System.out.println(name);
					//获取节点的属性
					if(name.equals("book")) {
						System.out.println(reader.getAttributeName(0)+":"+reader.getAttributeValue(0));
					}
				} else if(type==XMLStreamConstants.CHARACTERS) {
					System.out.println(reader.getText().trim());
				} else if(type==XMLStreamConstants.END_ELEMENT) {
					System.out.println("/"+reader.getName());
				}
			}
		} catch (XMLStreamException e) {
			e.printStackTrace();
		} finally {
			try {
				if(is!=null) is.close();
			} catch (IOException e) {
				e.printStackTrace();
			}
		}
	}
	
	
	
	@Test
	// 基于迭代模型的操作方式
	public void eventDemo() {
		try {
			XMLEventReader reader = factory.createXMLEventReader(is);
			while (reader.hasNext()) {
				XMLEvent event = reader.nextEvent();
				if (event.isStartDocument()) {
					System.out.println("startDocument");
				}
				if (event.isStartElement()) {
					String name = event.asStartElement().getName().toString();
					if ("title".equals(name)) {
						System.out.println(reader.getElementText());
					}
				}
			}
		} catch (XMLStreamException e) {
			e.printStackTrace();
		}
	}

	@Test
	public void filterDemo() {
		try {
			XMLEventReader reader = factory.createXMLEventReader(is);
			factory.createFilteredReader(reader, new EventFilter() {
				@Override
				//返回true表示会显示,如果是false则不会显示
				public boolean accept(XMLEvent xmlevent) {
					if (xmlevent.isStartDocument()) {
						String name = xmlevent.asStartElement().getName().toString();
						System.out.println(name);
						return true;
					}
					return false;
				}
			});
			int num = 0;
			while(reader.hasNext()) {
				//通过XMLEvent来获取是否是某种节点类型
				XMLEvent event = reader.nextEvent();
				if(event.isStartElement()) {
					//通过event.asxxx转换节点
					String name = event.asStartElement().getName().toString();
					if(name.equals("title")) {
						System.out.print(reader.getElementText()+":");
					}
					if(name.equals("price")) {
						System.out.print(reader.getElementText()+"\n");
					}
				}
				num++;
			}
			System.out.println(num);
			
			
		} catch (XMLStreamException e) {
			e.printStackTrace();
		}
	}
}

 

Java POI操作XML

java POI操作XML (2012-06-25 12:16:50)转载▼ 标签: it 分类: IT Jakarta POI 是一套用于访问微软格式文档的Java API。 Jakarta ...
  • pengguojun117
  • pengguojun117
  • 2013年12月22日 22:33
  • 730

使用Dom4j对XML文件的各种操作

由于同学的毕设的问题,让我给她写个对XML文件的操作的代码;还好,这里自己很熟悉;这么晚了,就把自己对Dom4j对XML文件的操作的一些心得写上来和大家分享。至于如何导入Dom4j的jar包,就不讲了...
  • vipygd
  • vipygd
  • 2012年05月20日 00:56
  • 4175

C#对XML的基本操作

今天这篇文章主要讲一下用C#如何实现对XML文件的基本操作,如:创建xml文件,增、删、改、查xml的节点信息。所使用的方法很基础,方便易懂(用于自己的学习和记忆只需,同时也希望能够给你带来一些帮助,...
  • ccmmjj1011
  • ccmmjj1011
  • 2017年06月05日 16:19
  • 198

c#对xml的基本操作

using System; using System.Collections.Generic; using System.Text; using System.Xml; namespa...
  • xiao_rory
  • xiao_rory
  • 2012年12月05日 16:41
  • 326

java中XML 数字签名的标准

注:本文来自IBM官方网站! 1. 技术背景 1.1 数字签名简介 数字签名是非对称密钥技术的一种应用模式,用于保证报文的完整性,不可否认性,以及提供身份认证信息。数字签名的原理如图...
  • u010644448
  • u010644448
  • 2016年03月23日 16:29
  • 2493

java xml dom基本操作

xml文件的基本格式我们再次不在叙述。本文会建立一个学生数据库,然后实现cudr操作。。部分资源来自某java培训机构。 工程文件如下 xml格式文件名是db.xml ...
  • bleuesprit
  • bleuesprit
  • 2015年05月03日 14:38
  • 320

使用Dom4j对XML进行增删改查

使用Dom4j对XML进行增删改查非常简单,这里就不多说废话,下面上代码 package com.bird.dom4j; import java.io.FileOutputStream; impo...
  • a352193394
  • a352193394
  • 2011年10月26日 20:29
  • 5339

xml编程:利用java程序去增删改查(CRUD)xml中的数据

2种解析思想1. dom解析: 优点:   十分便于进行增删改查的操作   只需解析一次拿到dom对象后可以重复使用对象,减少解析的次数 缺点:   解析过程比较慢。需要将整个文档都解析完...
  • u014726937
  • u014726937
  • 2016年03月27日 17:16
  • 770

Java对XML的解析技术

一、XML简介 1.1 概述 XML(ExtensibleMarkup language)在世界上的应用广泛性就如同眼镜在程序员中应用的广泛性一样,它与HTML一样,都出生于SGML,可用于简...
  • dbeautifulLife
  • dbeautifulLife
  • 2018年01月31日 10:06
  • 42

使用堆栈判断字符串是否回文

描述:对于一个从键盘输入的字符串,判断其是否为回文。回文即正反序相同。如“abba”是回文,而“abab”不是回文。[基本要求](1)数据从键盘读入;(2)输出要判断的字符串;    (3)利用栈的基...
  • ls1120623840
  • ls1120623840
  • 2017年04月15日 00:17
  • 667
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:java 对xml 基本操作
举报原因:
原因补充:

(最多只允许输入30个字)