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

import org.junit.Test;
import org.xml.sax.Attributes;
import org.xml.sax.SAXException;
import org.xml.sax.XMLReader;
import org.xml.sax.helpers.DefaultHandler;
//这个SAXParser只能按顺序进行调用不能返回重复调用函数进行解析,
public class SAXDemo{
@Test
public void demo() throws Exception {
//1.获得SAXParser的工厂类
SAXParserFactory factory=SAXParserFactory.newInstance();
//2.获得SAXParser解析器
SAXParser parse=factory.newSAXParser();
//获得XMLReader对象
XMLReader read=parse.getXMLReader();
//这里是设置监听,要覆盖原来的函数就按shif+alt+s再按V再从里面进行选择
read.setContentHandler(new DefaultHandler(){
private String elementName="";

@Override
public void startElement(String uri, String localName,
String qName, Attributes attributes) throws SAXException {
if(qName.equals("user")){
String id=attributes.getValue("id");
System.out.println("id="+id);
}
else if(qName.equals("name")||qName.equals("age")){
elementName=qName;
}

}

@Override
public void endElement(String uri, String localName, String qName)
throws SAXException {
if(qName.equals("name")||qName.equals("age")){
elementName="";
}
if(qName.equals("user")){
System.out.println("-------------------------");}

}

@Override
public void characters(char[] ch, int start, int length)
throws SAXException {
if(!elementName.equals("")){
String str=new String(ch,start,length);
System.out.println(elementName+":"+str);
}
}

});
read.parse("./xml/users.xml");
}
}

-----------------------------------------------------------------------------------

import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileReader;

import javax.xml.namespace.QName;
import javax.xml.stream.XMLEventReader;
import javax.xml.stream.XMLInputFactory;
import javax.xml.stream.XMLStreamException;
import javax.xml.stream.events.Characters;
import javax.xml.stream.events.StartElement;
import javax.xml.stream.events.XMLEvent;

import org.junit.Test;
import org.xml.sax.XMLReader;

public class STAdemo {
@Test
public void demo() throws Exception {
XMLInputFactory factory=XMLInputFactory.newInstance();
XMLEventReader read=factory.createXMLEventReader(new FileReader("./xml/users.xml"));
//这里跟SAXParser的差别在于XMLEventReader是有迭代器的它可以往上一级访问,而SAX不能只能一次惊醒访问,所以XML比SAX
//更加方便查询xml;
while(read.hasNext()){
XMLEvent en=read.nextEvent();
if(en.isStartElement()){
StartElement se=en.asStartElement();
if(se.getName().getLocalPart().equals("user")){
String id=se.getAttributeByName(new QName("id")).getValue();
System.out.println("ID="+id);
}
if(se.getName().getLocalPart().equals("name")){
Characters ch= read.nextEvent().asCharacters();
System.out.println("Name="+ch.toString());
}
if(se.getName().getLocalPart().equals("age")){
Characters chs=read.nextEvent().asCharacters();
System.out.println("age="+chs.toString());
}
}
if(en.isEndElement()){
if(en.asEndElement().getName().getLocalPart().equals("user")){
System.out.println("-------------------------");
}
}
}

}

}

SAXParser 解析器和 XMLEventReader(读取XML文档)的更多相关文章

  1. 【XML】利用Dom4j读取XML文档以及写入XML文档

    Dom4j简介 dom4j是一个Java的XML API,是jdom的升级品,用来读写XML文件的.dom4j是一个十分优秀的JavaXML API,具有性能优异.功能强大和极其易使用的特点,它的性能 ...

  2. PHP中利用DOM和simplxml读取xml文档

    实例  用DOM获取下列xml文档中所有金庸小说的书名,该xml文档所在位置为 ./books.xml: <?xml version="1.0" encoding=" ...

  3. java中XML操作:xml与string互转、读取XML文档节点及对XML节点增删改查

    一.XML和String互转: 使用dom4j程式变得很简单 //字符串转XML String xmlStr = \"......\"; Document document = D ...

  4. JAVA读取XML,JAVA读取XML文档,JAVA解析XML文档,JAVA与XML,XML文档解析(Document Object Model, DOM)

    使用Document Object Model, DOM解析XML文档 也可参考我的新浪博客:http://blog.sina.com.cn/s/blog_43ac5543010190w3.html ...

  5. Java获取XML节点总结之读取XML文档节点

    dom4j是Java的XML API,用来读写XML文件的.目前有很多场景中使用dom4j来读写xml的.要使用dom4j开发,需要下载导入dom4j相应的jar文件.官网下载:http://www. ...

  6. 读取XML文档结构并写入内容

    1.在项目中新建XML文档结构.xsd文件,在其中添加相应的节点. 2.读取文档结构并写入内容 string initFileName = @"D:\Config.xml"; Da ...

  7. 读取XML文档存入泛型List<T>集合中

    前一篇博文是<泛型List<T>转存为XML文档> http://www.cnblogs.com/insus/p/3277410.html 把一个List<T>集合 ...

  8. java中的xpath,读取xml文档。

    1,入门 XPath即为XML路径语言(XML Path Language),它是一种用来确定XML文档中某部分位置的语言. XPath基于XML的树状结构,提供在数据结构树中找寻节点的能力.起初 X ...

  9. JavaScript 解析读取XML文档 实例代码(转)

    JavaScript解析读取XML文件,主要就是加载并解析XML文件,然后就可以测试解析的XML文件的内容,打印输出来. 在线演示:http://demo.jb51.net/js/2012/readx ...

随机推荐

  1. Django中的Model继承

    Django 中的 model 继承和 Python 中的类继承非常相似,只不过你要选择具体的实现方式:让父 model 拥有独立的数据库:还是让父 model 只包含基本的公共信息,而这些信息只能由 ...

  2. ip_conntrack 实现

    启动时首先在ip_conntrack_standalone.c中调用 static int __init ip_conntrack_standalone_init(void) //proc相关部分省略 ...

  3. JNI编程(一) —— 编写一个最简单的JNI程序

    来自:http://chnic.iteye.com/blog/198745 忙了好一段时间,总算得了几天的空闲.貌似很久没更新blog了,实在罪过.其实之前一直想把JNI的相关东西整理一下的,就从今天 ...

  4. C# ASP.NET FILEUPLOAD详解

    显示一个文本框控件和一个浏览按钮,使用户可以选择要上载到服务器的文件. 命名空间: System.Web.UI.WebControls 程序集: System.Web(在 system.web.dll ...

  5. my sql 实现批量操作及注意问题

    使用in来实现批量操作是个很不错的想法: /*实现查询*/ select * from goods where goodsid in (102,103); /*实现批理删除*/ delete from ...

  6. MVC中的@Html.DisplayFor等方法如何控制日期的显示格式(转)

    http://www.tuicool.com/articles/BNVBR3 在Sql Server2005中,如果将某字段定义成日期 时间 类型DateTime,那么在视图中会默认显示成年月日时分秒 ...

  7. MySql配置参数很全的Mysql配置参数说明

    MySql配置参数 很全的Mysql配置参数说明 1. back_log 指定MySQL可能的连接数量.当MySQL主线程在很短的时间内得到非常多的连接请求,该参数就起作用,之后主线程花些时间(尽管很 ...

  8. SQL Server2008 程序设计 汇总 GROUP BY,WITH ROLLUP,WITH CUBE,GROUPING SETS(..)

    --SQL Server2008 程序设计 汇总 GROUP BY ,WITH ROLLUP  WITH CUBE  GROUPING SET(..) /*********************** ...

  9. lua使用优化建议

    1.使用局部变量local 这是最基础也是最有用的策略,虽然使用全局变量并不能完全避免,但还是应该尽量避免,取而代之使用局部变量即local.这里的局部变量也包括函数function,因为在Lua里函 ...

  10. UVa11584 - Partitioning by Palindromes(区间DP)

    题目大意 给定一个小写字母组成的字符串S,你的任务是划分成尽量少的回文串 题解 方程就是dp[j]=min(dp[i-1]+1)(i<=j,s[i..j]是回文串) 代码: #include&l ...