`
samjavaeye
  • 浏览: 194519 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

用SAX(JDK自带API)解析XML文件

    博客分类:
  • Java
 
阅读更多

解析的工具类继承org.xml.sax.helpers.DefaultHandler,然后覆盖父类的几个方法即可。方法的详细解释可以参照JDK的API文档。

  • startDocument() 开始解析XML时被调用,一般可以用来做初始化操作。
  • startElement() 解析到某个元素(标签)的开头时(例如<name>)被调用,一般用来判断是否已开始解析某特定元素(标签)。
  • endElement() 解析完某个元素(标签)时(例如</name>)被调用,一般在此对某些逻辑标记做重置操作。
  • characters()  解析到某个文本元素(例如<name>张三</name>)时被调用,一般在此方法中取值,需要结合startElement()方法中设置的逻辑标志进行判断是否解析到XML文档中特定的位置。

 下面是一个实例:

import java.util.ArrayList;
import java.util.List;
import java.io.File;
import java.io.IOException;

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

import org.xml.sax.Attributes;
import org.xml.sax.SAXException;
import org.xml.sax.helpers.DefaultHandler;

public class URLPatternSAXParser extends DefaultHandler{
	private List<String> urlPatternList;
	private boolean isSecurityConstraint;
	private boolean isWebResourceCollection;
	private boolean isUrlPattern;
	private final String elementSecurityConstraint = "security-constraint";
	private final String elementWebResourceCollection = "web-resource-collection";
	private final String elementUrlPattern = "url-pattern";

	public List<String> getUrlPatternList() {
		return urlPatternList;
	}

	@Override
	public void startDocument() throws SAXException {
		this.urlPatternList = new ArrayList<String>();
	}

	@Override
	public void startElement(String uri, String localName, String qName,
			Attributes attributes) throws SAXException {
		if (elementSecurityConstraint.equals(qName)) {
			isSecurityConstraint = true;
			return;
		}
		if (isSecurityConstraint && elementWebResourceCollection.equals(qName)) {
			isWebResourceCollection = true;
			return;
		}
		if (isSecurityConstraint && isWebResourceCollection
				&& elementUrlPattern.equals(qName))
			isUrlPattern = true;
	}

	@Override
	public void endElement(String uri, String localName, String qName)
			throws SAXException {
		if (elementSecurityConstraint.equals(qName)) {
			isSecurityConstraint = false;
		}
		if (elementWebResourceCollection.equals(qName))
			isWebResourceCollection = false;
		if (elementUrlPattern.equals(qName))
			isUrlPattern = false;
	}

	@Override
	public void characters(char[] ch, int start, int length)
			throws SAXException {
		if (isSecurityConstraint && isWebResourceCollection && isUrlPattern) {
			this.urlPatternList.add(new String(ch, start, length));
		}
	}

	public void parser(File xmlFile) throws SAXException, IOException,
			ParserConfigurationException {
		if (xmlFile == null) {
			throw new IllegalArgumentException(
					"parameter 'xmlFile' must not null !");
		}
		SAXParserFactory factory = SAXParserFactory.newInstance();
		SAXParser parser = factory.newSAXParser();
		// 禁止DTD解析,避免因找不到DTD文件导致解析失败。
		parser.getXMLReader()
				.setFeature(
						"http://apache.org/xml/features/nonvalidating/load-external-dtd",
						false);
		try {
			parser.parse(xmlFile, this);
		} catch (SAXException e) {
			System.err.println("Cann't parse " + xmlFile.getAbsolutePath());
			throw e;
		}
	}
}

 上面代码中,parser()是主方法,调用完此方法之后,就可以调用getUrlPatternList()方法获取到从web.xml中解析出来的url-pattern节点的值(security-constraint/web-resource-collection/url-pattern)。

 

另外,取元素的属性值,可以在startElement()方法中用attributes.getValue("<属性名>")获取到。

分享到:
评论

相关推荐

    JDK自带xml解析器dom+sax

    代码示例中没有给出完整的SAX解析器实现,但通常会包括`SAXParserFactory`创建`SAXParser`,然后使用`parse`方法解析XML文件,并传入自定义的`DefaultHandler`子类实例。 总结: DOM解析器适合对XML文档进行随机...

    JDK1.6API中文版

    8. **XML处理**:`javax.xml`包包含了处理XML的类,如DOM、SAX和StAX解析器,以及XPath和XSLT处理器。 9. **Swing组件**:`javax.swing`包提供了用于构建图形用户界面的组件,如按钮、文本框、面板等。 10. **国际...

    java在线解析xml

    在Java中,JDK自带的`javax.xml.parsers`和`org.xml.sax`包提供了DOM和SAX的实现,而StAX则包含在`javax.xml.stream`包中。使用这些API,开发者可以轻松地实现XML的在线解析。 例如,使用DOM解析XML文件的简单步骤...

    解析XML的四种JAR包jdom.jar、SAX.jar、dom4j.jar、dom.jar

    Simple API for XML (SAX) 是一个事件驱动的解析器,它不将整个XML文档加载到内存中,而是通过触发一系列的事件(如开始元素、结束元素等)来解析XML。SAX解析器内存效率高,适用于大文件,但编程接口相对复杂,...

    JDK_API_1_6_zh_CN.zip

    5. **XPath和XSLT支持**:内置了SAX和DOM解析器,以及XPath和XSLT处理器,方便XML数据的处理和转换。 6. **JSR 199:Java编译API**:允许在运行时动态编译Java源代码,为Java应用提供了更大的灵活性。 7. **改进的...

    jdk1.6+API,中文+工具书

    6. **改进的XML处理**:DOM、SAX和StAX解析器性能提升,同时增加了对JAXB 2.0的支持。 7. **改进的JDBC**:JDBC 4.0引入了自动注册驱动、批处理和连接池等功能。 8. **Java数据库连接(JDBC)的改进**:提供了对JDBC...

    超经典xml类

    例如,JDK自带的`javax.xml.parsers.DocumentBuilderFactory`和`org.w3c.dom.Document`可用于构建和操作DOM树。 2. SAX解析: SAX解析器不将整个文档加载到内存,而是通过事件处理器接口(如`ContentHandler`)...

    XML解析,初学XML解析,初学

    以Java为例,介绍如何使用DOM和SAX解析XML: 1. **DOM解析**: ```java DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance(); DocumentBuilder builder = factory.newDocumentBuilder(); ...

    Java6.0新特性之StAX--全面解析Java XML分析技术

    在Java 6.0中,StAX被包含在`javax.xml.stream`包下,可以方便地通过JDK自带的API来使用。例如,以下是一个简单的StAX读取XML文档的示例: ```java import javax.xml.stream.XMLInputFactory; import javax.xml....

    java_rean_writer_xml.rar_JSP读写XML_XML java_java Writer xml_java

    在JSP中,我们可以使用JDK自带的`javax.xml.parsers.DocumentBuilderFactory`和`javax.xml.transform.TransformerFactory`等类来读取和写入XML文件。以下是一个简单的JSP读取XML文件的例子: ```jsp *,javax.xml....

    JDK1.6的九大新特性

    - **其他选择**:虽然JAXB是JDK自带的工具,但开发者还可以选择其他类似的库,如XMLBeans和Castor,它们提供了类似的功能。 #### 三、理解StAX - **StAX**(Streaming API for XML)是一种新的XML处理API,旨在...

    jdk6.0中文文档

    4. **XML处理增强**:更新了DOM和SAX解析器,支持XPath 2.0和XSLT 2.0,提高了XML文档处理的灵活性和效率。 5. **数据库连接池**:JDBC 4.0规范提供了自动的连接池管理,简化了数据库连接的管理,提高了应用的性能...

    xalan系列jar包

    当新的XML解析器或XSLT处理器比JDK自带的更先进时,可以通过在endorsed目录下放置这些库的JAR来优先使用它们。 综上所述,Xalan系列JAR包提供了一套完整的XML处理解决方案,从解析XML文档,到执行XSLT转换,再到...

    jdk-6u45-windows-x64.zip

    5. **XML处理**:更新了DOM、SAX和StAX解析器,增强了XPath和XSLT的支持。 6. **Java Web Start和Applet的改进**:提供更好的安全性和用户体验,以及对JNLP(Java Network Launch Protocol)的增强。 7. **Java...

    xfire-distribution-1.2.3

    3. **高性能**: XFire 使用了 StAX(Streaming API for XML)进行 XML 解析,相比 DOM 和 SAX,StAX 提供了更优秀的性能和更低的内存占用。 4. **广泛的协议支持**: XFire 支持 SOAP 1.1 和 1.2,WS-Security,WS-...

    海辉面试题

    解析XML文件通常有三种方式:DOM、SAX 和 StAX。这里以DOM为例,使用jdk自带的`javax.xml.parsers.DocumentBuilderFactory`来进行解析: 1. **导入必要的包**:首先需要导入`javax.xml.parsers`相关的包。 2. **...

    JAVA6.0帮助文档

    Java 6.0强化了对XML的支持,包括DOM、SAX和StAX解析器,以及JAXB用于对象与XML之间的绑定。`javax.xml.transform`包提供了转换XML文档的能力。 总结来说,"JAVA6.0帮助文档"涵盖了Java 6.0的各个方面,从基本语法...

    Java学习必得(网摘)

    7. **XML处理**:SAX、DOM和JDOM是解析XML文档的API,需了解它们的工作原理和应用场景。 8. **单元测试**:使用JUnit编写测试用例以确保代码质量,理解断言、测试套件和异常测试。 9. **工程管理**:Ant是构建工具...

    Java程序员需掌握的技能.docxJava程序员需掌握的技能.docx

    7. **XML处理**:熟悉SAX、DOM和JDOM等XML解析库,能进行XML文件的读取、修改和生成。 8. **单元测试**:使用JUnit编写测试用例,进行代码自动化测试,确保代码质量。 9. **构建工具**:熟悉ant或maven等构建工具...

    如何成为一个合格的java程序员

    10. **XML处理**:了解SAX、DOM等解析方式,掌握一种方法实现XML的解析和生成。 ### 五、单元测试与自动化构建 - **JUnit**:掌握基本的单元测试框架,编写测试用例验证功能的正确性。 - **Ant/Maven**:熟悉构建...

Global site tag (gtag.js) - Google Analytics