在最近的一个项目中,我用到Dom4j去解析现有的Spring2.0中的bean节点,从中获取一些公用的属性信息。
// Get params of hsql setting from web context
SAXReader xmlReader = new SAXReader();
Document doc = xmlReader.read(getSpringContextFilePath(sce));
Element beanNode = (Element) doc.selectSingleNode("/beans/bean[@id='DatabaseParam']");
这段代码在电脑连接到互联网上的时候工作都正常,但是如果电脑在端线状态的时候就会报错如下:
org.dom4j.DocumentException: www.springframework.org Nested exception: www.springframework.org
at org.dom4j.io.SAXReader.read(SAXReader.java:484)
at org.dom4j.io.SAXReader.read(SAXReader.java:321) ....
看错误的提示,应该是说现在电脑无法找到一个www.springframework.org 的网络主机。
仔细察看一下Spring的配置文件头,里面有如下的一个头文件注释:
<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "http://www.springframework.org/dtd/spring-beans-2.0.dtd">
问题就出现在这里!xmlReader.read 读取Spring配置文件的时候报错。
所以,我们需要替换掉这里的http://www.springframework.org/ 为一个本地的dtd文件。如何替换呢?
可以考虑将这里的http:///协议的路径改为一个file:/// 方式的本地文件,但是这样路径就指定死了,不便于程序移植。
另外一种方案就是,为这里的xmlReader添加一个EntiyResolver:
// Set a resolver for reader to locate dtd file for Spring
xmlReader.setEntityResolver(new EntityResolver()
{
public InputSource resolveEntity(String publicId,
String systemId)
{
if (publicId.equals("-//SPRING//DTD BEAN//EN"))
{
InputStream in = getClass().getResourceAsStream(
"/spring-beans-2.0.dtd");
return new InputSource(in);
}
return null;
}
});
这样,每一次的xmlReader调用时,dom4j首先就会去从本地的classpath下面去寻找一个相应的dtd去处理,问题也就迎刃而解了。
可能有人有另外的疑问了,为什么Spring本身解析xml没有出现过这个错误呢? 其实Spring会首先在本地的固定路径中寻找spring-beans-2.0.dtd文件(具体在spring-beans.jar包中的com.springframework.beans.factory.xml路径下),如果找不到,然后才会参照DOCTYPE中的地址去寻找。
分享到:
相关推荐
java在线解析xmljava在线解析xmljava在线解析xmljava在线解析xmljava在线解析xmljava在线解析xmljava在线解析xmljava在线解析xmljava在线解析xmljava在线解析xmljava在线解析xmljava在线解析xmljava在线解析xmljava...
Json和Xml离线格式化工具
解析xml解析xml解析xml解析xml解析xml解析xml解析xml解析xml解析xml解析xml解析xml解析xml解析xml解析xml
android下解析xml文件的demo
SAX解析XML文件的实例。一个项目同时用dom解析和sax解析xml文件貌似会报错,项目框架建一直是用sax和dom4j解析xml文件的。当我用dom解析xml文件。导入包后就报错识别不了xml文件的编码格式。于是做了一个sax解析xml...
JAVA 解析XML和生成XML文档源码。比较全 1.DOM生成和解析XML文档 2.SAX生成和解析XML文档 3.DOM4J生成和解析XML文档 4.JDOM生成和解析XML
sap解析xml报文并将报文内容提取到内表中,附件带有详细的源代码和操作步骤。有注释!
XML 解析XML 解析XML 解析XML 解析XML 解析XML 解析XML 解析
离线地图切片为tpk文件,切片方案配置xml文件,可修改投影坐标系和切割比例,本方案是西安80投影下切片方案,可更具所需修改。
PB 解析XML (代码案例)
xml解析xml解析xml解析例子xml解析xml解析xml解析xml解析xml解析xml解析xml解析
C++实现对xml文件的解析,C++实现对xml文件的解析,C++实现对xml文件的解析。
解析xml
STM32f107应用minixml库解析xml,成功解析,软件仿真通过。适合初次接触STM32解析xml的童鞋们。
java解析XML文件java解析XML文件java解析XML文件java解析XML文件java解析XML文件java解析XML文件
资源名称:使用Javascript解析xml文件或xml格式字符串 中文WORD版 内容简介: 本文档主要讲述的是使用Javascript解析xml文件或xml格式字符串;javascript中,不论是解析xml文件,...
PHP解析XML文档,PHP解析XML文档,PHP解析XML文档
纯C语言解析xml字符串,有实例,保证可用,含makefile xmlparse.c xmlparse.h testxml.c 目录:/export/home/chcard/testxml 日志:/export/home/chcard/log testxml.c 是一个测试用例,包含了常用的方法,并有注解 ...
易语言 xml解析 易语言 xml解析 易语言 xml解析 易语言 xml解析 易语言 xml解析 易语言 xml解析 易语言 xml解析 教程 带源码
python解析xml文件,python语言解析xml文件的常用的有两种方式: 通过MiniDom库解析xml文件 通过ElementTree库解析xml文件