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


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 .评论
点击登录|昵称:
取消
验证码:换一张

你可能感兴趣的:(factory)