XML入门(四)使用STAX解析XML
前言
本章讲解使用STAX解析XML文件
方法
1.概念
在我们XML解析技术发展的过程中,诞生了很多优秀的解析技术,如:DOM、SAX、JDOM、Dom4J、STAX等
这里我们来讲解一下STAX解析XML文档的方法!
2.使用STAX解析XML
1)准备如下xml文件放在src目录下
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE note SYSTEM "hello.dtd">
<note type="local">
<to>George</to>
<from>John</from>
<heading>Reminder</heading>
<body>Don't forget the meeting!</body>
</note>
2)编写如下代码解析我们的xml文件
package cn.edu.ccut.test;
import java.io.FileReader;
import java.util.Iterator;
import javax.xml.stream.XMLEventReader;
import javax.xml.stream.XMLInputFactory;
import javax.xml.stream.events.Attribute;
import javax.xml.stream.events.StartElement;
import javax.xml.stream.events.XMLEvent;
import org.junit.Test;
public class TestSTAX {
@Test
public void testSTAX() throws Exception{
//创建XML流工厂
XMLInputFactory factory = XMLInputFactory.newInstance();
//创建XML事件读取流
XMLEventReader reader = factory.createXMLEventReader(new FileReader("src/hello.xml"));
while(reader.hasNext()){
XMLEvent event = reader.nextEvent();
//如果是开始元素
if(event.isStartElement()){
//获取开始元素
StartElement start = event.asStartElement();
String name = start.getName().toString();
//获取属性
Iterator iterator = start.getAttributes();
while (iterator.hasNext()) {
Attribute obj = (Attribute)iterator.next();
System.out.println(obj.getName()+":"+obj.getValue());
}
System.out.println("<"+name+">");
}
//如果是文本
if(event.isCharacters()){
//获取文本值
String str = event.asCharacters().getData();
if(!"".equals(str.trim())){
System.out.println(str);
}
}
}
}
}
程序运行结果如下:
可以说,基本上解析了全部的内容,完成了预期的功能