您的位置:首页 > 编程语言 > Java开发

【JAVA】java:使用XMLReaderFactory类和XMLReader类解析XML文档

2012-02-16 17:12 525 查看
java:使用SAXParserFactory类和SAXParser类解析XML文档

java:使用JDOM解析XML文档

.java:使用XMLReaderFactory类和XMLReader类解析XML文档 2008-06-17 18:48:17| 分类: 技术资料 | 标签:java xml |字号大中小 订阅 .

package xmltest;

import java.io.FileInputStream;

import java.io.IOException;

import org.xml.sax.*;

import org.xml.sax.helpers.*;

public class ErrorProcessor extends DefaultHandler

{

public void warning(SAXParseException ex) throws SAXException

{

System.err.println("[Warning] "+getLocationString(ex)+": "+ex.getMessage());

}

public void error(SAXParseException ex) throws SAXException

{

System.err.println("[Error] "+getLocationString(ex)+": "+ex.getMessage());

}

public void fatalError(SAXParseException ex) throws SAXException

{

System.err.println("[Fatal Error] "+getLocationString(ex)+": "+ex.getMessage());

}

/**

* 获取导致错误或者警告的文本结束位置的行号和列号。

* 如果是实体引发错误,还获取它的公共标识符和系统标识符。

*/

private String getLocationString(SAXParseException ex)

{

StringBuffer str = new StringBuffer();

String publicId = ex.getPublicId();

if (publicId != null)

{

str.append(publicId);

str.append(" ");

}

//这里返回XML文件的全路径,比如:file:///D:/dshapp/xmltest/students.xml

String systemId = ex.getSystemId();

if (systemId != null)

{

str.append(systemId);

str.append(':');

}

str.append(ex.getLineNumber());

str.append(':');

str.append(ex.getColumnNumber());

return str.toString();

}

/**

* 输出元素的结束标记,以便于查看不同类型的错误对文档解析的影响。

*/

public void endElement(String uri,String localName,String qName) throws SAXException

{

System.out.println("</"+qName+">");

}

public static void main(String[] args)

{

try

{

//利用XMLReaderFactory工厂类,创建XMLReader对象。

System.setProperty("org.xml.sax.driver", "org.apache.xerces.parsers.SAXParser");

XMLReader xmlReader=XMLReaderFactory.createXMLReader();

//打开解析器的验证功能。

xmlReader.setFeature("http://xml.org/sax/features/validation",true);

ErrorProcessor ep=new ErrorProcessor();

xmlReader.setErrorHandler(ep);

xmlReader.setContentHandler(ep);

InputSource is=new InputSource(new FileInputStream("students.xml"));

xmlReader.parse(is);

//xmlReader.parse("students.xml");

}

catch(SAXException e){System.out.println(e.toString());}

catch(IOException e){System.out.println(e.toString());}

}

}

PS:需要将包文件:xercesImpl.jar和xml-apis.jar复制到测试项目的\WebRoot\WEB-INF\lib下,在包xercesImpl.jar里,有META-INF\services目录与,里面有一个文件:org.xml.sax.driver,其内容就是“org.apache.xerces.parsers.SAXParser”,这是SAX2的驱动程序。

在这个目录下,还有以下文件:

javax.xml.parsers.DocumentBuilderFactory,内容为:org.apache.xerces.jaxp.DocumentBuilderFactoryImpl

javax.xml.parsers.SAXParserFactory,内容为:org.apache.xerces.jaxp.SAXParserFactoryImpl

这些文件中所指定的工厂类名就是XML解析器工厂类,用来构造工厂类的实例,一般为多数解析器提供商采用。

JAXP还包含了一个叫做crimson的解析器,从JAXP1.2开始,SUN公司对Apache的Xerces解析器重新包装了一下,并将org.apache.xerces包名改为了com.sun.org.apache.xerces.internal,然后在JAXP的开发包中一起提供,作为默认的解析器,我们所使用的JDK1.5中包含的默认解析器就是被重新包装过后的Xerces解析器。

在JDK1.4中没有包含这个解析器,需要自己下载。

评论这张

转发至微博

转发至微博

0人 | 分享到: 阅读(1386)| 评论(0)| 引用 (0) |举报 .

java:使用SAXParserFactory类和SAXParser类解析XML文档

java:使用JDOM解析XML文档.历史上的今天.

相关文章

javax.xml.parsers.FactoryConfigurationError...错误解决 xml配置文件的读取处理 java读取xml配置文件(小结) JAVA解析XML配置文件的读取操作 用java实现基于soap的xml文档网络传输及远程过程调用(rpc) (一) .最近读者

登录后,您可以在此留下足迹。.

jarzen

SWfan

承诺需要

aaa_abc3

rainfant

tianzz12

zhoutao2

xjh167@1 .评论

点击登录|昵称:

取消

验证码:换一张
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: