`
qingzuochen
  • 浏览: 271402 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

离线解析XML(不连网)出错的解决办法

阅读更多
解决办法可以参见这位老兄的博客:http://tailsherry.iteye.com/blog/98111

对第二种方法补充两个小分支:
1.直接写一内部类,代码如下
class NoOpEntityResolver implements EntityResolver {
		  public InputSource resolveEntity(String publicId, String systemId) {
		    return new InputSource(new StringBufferInputStream(""));
		  }
	}

使用时,加上代码:
xmlReader.setEntityResolver(new NoOpEntityResolver());

这样也能通过。

2.可参考hibernate的处理方式来实现EntityResolver。见org.hibernate.util.DTDEntityResolver。这里贴上它的resolveEntity()方法。
public InputSource resolveEntity(String publicId, String systemId) {
		if ( systemId != null ) {
			log.debug( "trying to resolve system-id [" + systemId + "]" );
			if ( systemId.startsWith( HIBERNATE_NAMESPACE ) ) {
				log.debug( "recognized hibernate namespace; attempting to resolve on classpath under org/hibernate/" );
				String path = "org/hibernate/" + systemId.substring( HIBERNATE_NAMESPACE.length() );
				InputStream dtdStream = resolveInHibernateNamespace( path );
				if ( dtdStream == null ) {
					log.debug( "unable to locate [" + systemId + "] on classpath" );
					if ( systemId.substring( HIBERNATE_NAMESPACE.length() ).indexOf( "2.0" ) > -1 ) {
						log.error( "Don't use old DTDs, read the Hibernate 3.x Migration Guide!" );
					}
				}
				else {
					log.debug( "located [" + systemId + "] in classpath" );
					InputSource source = new InputSource( dtdStream );
					source.setPublicId( publicId );
					source.setSystemId( systemId );
					return source;
				}
			}
			else if ( systemId.startsWith( USER_NAMESPACE ) ) {
				log.debug( "recognized local namespace; attempting to resolve on classpath" );
				String path = systemId.substring( USER_NAMESPACE.length() );
				InputStream stream = resolveInLocalNamespace( path );
				if ( stream == null ) {
					log.debug( "unable to locate [" + systemId + "] on classpath" );
				}
				else {
					log.debug( "located [" + systemId + "] in classpath" );
					InputSource source = new InputSource( stream );
					source.setPublicId( publicId );
					source.setSystemId( systemId );
					return source;
				}
			}
		}
		// use default behavior
		return null;
	}
分享到:
评论
1 楼 trunk 2012-04-25  
最近也在搞这个解析。我也是用自己实现resolveEntity的接口来做的,可是测试的时候故意将xml写错,当时解析的时候却没有报错。。。。
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
        factory.setAttribute(JAXP_SCHEMA_LANGUAGE,W3C_XML_SCHEMA);
        factory.setValidating(true);
        factory.setNamespaceAware(true);
        DocumentBuilder docBuilder = factory.newDocumentBuilder();
        docBuilder.setEntityResolver(new MyEntityResolver());
        docBuilder.setErrorHandler(new MyErrorHandler());
        InputStream in = Test.class.getClassLoader().getResourceAsStream("t.xml");
        Document doc = docBuilder.parse(in);


主要的代码是上面,xml与schema没有贴出来。是不是我少了那一步啊?     

相关推荐

    Json和Xml离线格式化工具

    Json和Xml离线格式化工具

    java在线解析xmljava在线解析xmljava在线解析xmljava在线解析xml

    java在线解析xmljava在线解析xmljava在线解析xmljava在线解析xmljava在线解析xmljava在线解析xmljava在线解析xmljava在线解析xmljava在线解析xmljava在线解析xmljava在线解析xmljava在线解析xmljava在线解析xmljava...

    weblogic无法解析xml解决办法

    有些情况下,在开发web项目中会遇到weblogic无法解析xml的错误,是因为weblogic在解析xml时是调用自己的方法去解析,会产生一些莫名其妙的错误,我们只要在web-inf下添加weblogic.xml让其让出解析权即可.

    解析xml解析xml解析xml解析xml解析xml

    解析xml解析xml解析xml解析xml解析xml解析xml解析xml解析xml解析xml解析xml解析xml解析xml解析xml解析xml

    SAX解析XML文件实例

    SAX解析XML文件的实例。一个项目同时用dom解析和sax解析xml文件貌似会报错,项目框架建一直是用sax和dom4j解析xml文件的。当我用dom解析xml文件。导入包后就报错识别不了xml文件的编码格式。于是做了一个sax解析xml...

    JAVA 解析XML生成XML文档实例

    JAVA 解析XML和生成XML文档源码。比较全 1.DOM生成和解析XML文档 2.SAX生成和解析XML文档 3.DOM4J生成和解析XML文档 4.JDOM生成和解析XML

    XML 解析XML 解析XML 解析XML 解析XML 解析

    XML 解析XML 解析XML 解析XML 解析XML 解析XML 解析XML 解析

    SAP解析xml abap解析xml

    sap解析xml报文并将报文内容提取到内表中,附件带有详细的源代码和操作步骤。有注释!

    C++解析xml文件

    C++实现对xml文件的解析,C++实现对xml文件的解析,C++实现对xml文件的解析。

    xml解析xml解析xml解析xml解析

    xml解析xml解析xml解析例子xml解析xml解析xml解析xml解析xml解析xml解析xml解析

    解析xml的jar包

    解析xml

    PB 解析XML (代码案例)

    PB 解析XML (代码案例)

    STM32解析XML

    STM32f107应用minixml库解析xml,成功解析,软件仿真通过。适合初次接触STM32解析xml的童鞋们。

    java解析XML文件

    java解析XML文件java解析XML文件java解析XML文件java解析XML文件java解析XML文件java解析XML文件

    易语言 xml解析 易语言 xml解析 教程 带源码

    易语言 xml解析 易语言 xml解析 易语言 xml解析 易语言 xml解析 易语言 xml解析 易语言 xml解析 易语言 xml解析 教程 带源码

    PHP解析XML文档

    PHP解析XML文档,PHP解析XML文档,PHP解析XML文档

    纯C语言解析xml字符串

    纯C语言解析xml字符串,有实例,保证可用,含makefile xmlparse.c xmlparse.h testxml.c 目录:/export/home/chcard/testxml 日志:/export/home/chcard/log testxml.c 是一个测试用例,包含了常用的方法,并有注解 ...

    使用javascript解析xml文件或xml格式字符串中文WORD版

    资源名称:使用Javascript解析xml文件或xml格式字符串 中文WORD版   内容简介: 本文档主要讲述的是使用Javascript解析xml文件或xml格式字符串;javascript中,不论是解析xml文件,...

    python解析xml文件

    python解析xml文件,python语言解析xml文件的常用的有两种方式: 通过MiniDom库解析xml文件 通过ElementTree库解析xml文件

    关于解析xml文件的,很有用的东东

    关于解析xml文件的,很有用的东东关于解析xml文件的,很有用的东东关于解析xml文件的,很有用的东东关于解析xml文件的,很有用的东东关于解析xml文件的,很有用的东东关于解析xml文件的,很有用的东东关于解析xml...

Global site tag (gtag.js) - Google Analytics