StAX和SAX原理还有一点区别:
就是以流的形式来处理XML文件。
import java.io.*;
import java.net.*;
import javax.xml.stream.*;
/**
* This program demonstrates how to use a StAX parser. The program prints all hyperlinks links of an
* XHTML web page. <br>
* Usage: java StAXTest url
* @author Cay Horstmann
* @version 1.0 2007-06-23
*/
public class StAXTest
{
public static void main(String[] args) throws Exception
{
String urlString;
if (args.length == 0)
{
urlString = "http://www.w3c.org";
System.out.println("Using " + urlString);
}
else urlString = args[0];
URL url = new URL(urlString);
InputStream in = url.openStream();
XMLInputFactory factory = XMLInputFactory.newInstance();
XMLStreamReader parser = factory.createXMLStreamReader(in);
while (parser.hasNext())
{
int event = parser.next();
if (event == XMLStreamConstants.START_ELEMENT)
{
if (parser.getLocalName().equals("a"))
{
String href = parser.getAttributeValue(null, "href");
if (href != null)
System.out.println(href);
}
}
}
}
}
一 所有节点都以Event形式封装
- javax.xml.stream.XMLStreamConstants
- javax.xml.stream.events.XMLEvent
- javax.xml.stream.events.Attribute
- javax.xml.stream.events.Namespace
- javax.xml.stream.events.Characters
- javax.xml.stream.events.Comment
- javax.xml.stream.events.DTD
- javax.xml.stream.events.EndDocument
- javax.xml.stream.events.EndElement
- javax.xml.stream.events.EntityDeclaration
- javax.xml.stream.events.EntityReference
- javax.xml.stream.events.NotationDeclaration
- javax.xml.stream.events.ProcessingInstruction
- javax.xml.stream.events.StartDocument
- javax.xml.stream.events.StartElement
- javax.xml.stream.events.Attribute
- javax.xml.stream.events.XMLEvent
字段摘要 | |
---|---|
static int | ATTRIBUTE 指示事件是一个属性 |
static int | CDATA 指示事件是一个 CDATA 节 |
static int | CHARACTERS 指示事件是一些字符 |
static int | COMMENT 指示事件是一个注释 |
static int | DTD 指示事件是一个 DTD |
static int | END_DOCUMENT 指示事件是一个结束文档 |
static int | END_ELEMENT 指示事件是一个结束元素 |
static int | ENTITY_DECLARATION 指示一个 Entity Declaration |
static int | ENTITY_REFERENCE 指示事件是一个实体引用 |
static int | NAMESPACE 指示事件是一个名称空间声明 |
static int | NOTATION_DECLARATION 指示一个 Notation |
static int | PROCESSING_INSTRUCTION 指示事件是一条处理指令 |
static int | SPACE 字符是空格(参阅 [XML], 2.10 "White Space Handling")。 |
static int | START_DOCUMENT 指示事件是一个开始文档 |
static int | START_ELEMENT 指示事件是一个开始元素 |
主要的Parser类
- javax.xml.stream.XMLEventFactory
- javax.xml.stream.XMLInputFactory
- javax.xml.stream.XMLOutputFactory
接口层:
- javax.xml.stream.EventFilter
- java.util.Iterator<E>
- javax.xml.stream.XMLEventReader
- javax.xml.stream.Location
- javax.xml.stream.StreamFilter
- javax.xml.stream.util.XMLEventConsumer
- javax.xml.stream.XMLEventWriter
- javax.xml.stream.XMLReporter
- javax.xml.stream.XMLResolver
- javax.xml.stream.XMLStreamConstants
- javax.xml.stream.XMLStreamReader
- javax.xml.stream.XMLStreamWriter
XMLInputFactory类 1主要用于生产XMLEventReader和XMLStreamReader类(createStreamReader() createEventReader ()),该类是一个XML流,也相当于Parser的作用。
XMLEventReader和XMLStreamReader类是两个相近类。只不过一个使用Event形式,一个使用String形式 。
2 setProperty用来设计属性 如:isValidating isnamespaceAware
XMLStreamReader 类:
方法:int next() 返回值与常量比较 START_ELEMENT CHARACTERS等 -----------------boolean hasnext()
getName() getText() getAttributes()