`
tailsherry
  • 浏览: 136220 次
  • 性别: Icon_minigender_1
  • 来自: 珠海
社区版块
存档分类
最新评论

离线状态下,解析XML出错

阅读更多

在最近的一个项目中,我用到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中的地址去寻找。

 

分享到:
评论
1 楼 shuren 2008-07-21  
good

相关推荐

    Embed嵌入XML

    2. **解析XML数据**:一旦有了`XML`对象,就可以像处理任何其他XML数据一样操作它。例如,读取节点值、遍历元素等。 ```actionscript var nodeName:String = xmlData.firstChild.name(); var nodeValue:String =...

    findview自动初始化离线使用

    4. **自动代码生成**:工具通过解析XML布局文件,可以自动生成对应的Java或Kotlin代码,减少了手动编码的工作量。这通常是通过XML解析库实现的。 5. **Java和Kotlin**:这两种语言是Android开发的主流选择。工具能...

    findview初始化离线使用

    使用这个工具,开发者可以将XML布局文件导入,它会自动解析布局文件中的每个控件,并生成相应的findViewById()调用,以及可能的变量声明和数据绑定。这样,开发者只需复制生成的代码块到项目中,就可以立即完成所有...

    GWT Eclipse 4.4插件离线安装包

    **GWT(Google Web Toolkit)** 是一个由Google开发的开源JavaScript框架,它允许Java开发者使用Java语言来编写Web应用...同时,离线安装方式确保了开发者即使在网络条件不理想的情况下也能顺利使用这款强大的工具。

    Android 北京公交线路查询(离线).zip

    Android提供了DOM、SAX和Jackson等库用于解析XML和JSON。 6. **性能优化**:由于数据量可能较大,加载和查询速度优化至关重要。可以采用数据库索引、预加载策略、懒加载等方式提升性能。 7. **缓存策略**:虽然...

    基于PHP的迅雷离线影视资源搜索引擎源码 php版 v1.0.zip

    5. **数据抓取与解析**:源码可能包含HTML或XML抓取技术,如DOM解析(DOMDocument类)或正则表达式,用于从迅雷离线网页中提取资源链接。 6. **前端界面**:使用HTML、CSS和JavaScript构建用户界面,可能运用...

    Linq 大全 Linq To Sql Linq To DataSet Linq To Object Linq to Xml

    可能包含了各种LINQ应用场景的示例代码,如如何使用LINQ to SQL执行数据库查询,如何使用LINQ to DataSet操作数据集,如何使用LINQ to Object处理内存中的数据,以及如何使用LINQ to XML解析和生成XML文档。...

    【离线版】android 按字母排序的省份列表,类似通讯录的字母索引,城市列表

    类似手机通讯录的ListView列表,右侧有A-Z的26个字母索引,点击...右键单击工程-Properties-Java Build Path-Oder and Export-pinyin4j-2.5.0.jar,2:手机无需连接连接网络】,数据是以xml方式写在本地,解析后加载……

    Android设备数据交换应用研究.pdf

    该应用具备四大特点:首先,用户可以根据需求自定义导出数据,通过解析XML配置文件,支持导入导出文件或文件夹,实现批量操作。其次,应用支持批量连接多个Android平板,使得一次可以处理大量数据,提高了工作效率。...

    百度语音集成手册

    对于离线识别,需要注意资源文件设置、离线垂类槽数据设置,并了解离线识别支持的语法说明,比如输入法、地图、音乐等不同场景下的指令语法。 API方式识别是使用SDK进行语音识别的主要方式,开发者需要通过编程创建...

    spring-jee-4.2.xsd.zip

    这个文件定义了Spring如何理解和解析与JEE相关的XML配置元素,如数据源、EJB、JMS等。在没有网络或者远程获取速度慢的情况下,本地保存并引用这个XSD文件,可以大大提高开发效率,避免因网络问题导致的延误。 XSD...

    天气预报APP

    - 可能使用SharedPreferences存储用户登录状态,以便在应用重启后保持登录信息。 3. **数据同步与API调用**: - 天气数据通常通过调用开放的天气API获取,如OpenWeatherMap、Weather Underground等。发送HTTP请求...

    WinCE 下实现远程控制,已经在WinCE平台上得到验证,此为客户端,可以在服务器PC机部失去操作功能的情况下,自由调用,存取数据。为PDA开发增加新思路

    例如,可以创建一个基于JSON或XML的结构化数据格式,便于解析和构建。 接下来,实现远程控制功能通常需要用到远程桌面协议(RDP)或VNC(Virtual Network Computing)等技术。在WinCE系统中,可能需要使用第三方库...

    MyBatipse插件

    在压缩包文件中,`content.jar`和`artifacts.jar`通常包含插件的核心代码和资源,`plugins`目录下的文件则是Eclipse插件系统识别的插件组件,`features`目录则包含了插件的特性描述和依赖信息。安装MyBatipse插件时...

    andriod 答题系统,做题目的应用,做完后判断题目错误数和正确数,查看问题答案

    - 使用Android Studio中的布局工具(如XML布局或Jetpack Compose)来构建用户友好的界面,包括题目显示区域、选项按钮、计分板和答案解析部分。 - 考虑到不同设备的屏幕尺寸,应采用响应式设计,确保在各种设备上...

    SqlmapGenerator:一个IntelliJ Idea插件,旨在为您生成ibatis sql映射,从而节省时间,节省金钱,挽救生命

    在传统的开发模式下,开发者需要手动编写这些SQL语句及其对应的参数绑定和结果映射,这不仅耗时,还容易出错。SqlmapGenerator插件通过解析数据库结构和Java实体类,自动生产这些映射文件,减少了人工错误的可能性,...

    idea-mybatis插件包

    7. **开发效率**:通过使用此插件,开发者可以更快速地定位和修改MyBatis代码,减少出错的可能性,提升整体的开发效率和代码质量。 8. **兼容性**:由于是针对free-idea设计的,所以这个插件应能与IntelliJ IDEA的...

    能用的PHP5中文手册CHM版本

    9. **XML和Web服务**:解析和生成XML文档,以及SOAP、RESTful API等Web服务的处理。 10. **安全实践**:如过滤用户输入、防止SQL注入、XSS攻击防御等,确保应用程序的安全性。 通过这份《PHP5中文手册CHM版本》,...

    pentaho-aggdesigner-algorithm-5.1.5-jhyde.tar

    解决 Cannot resolve org.pentaho:pentaho-aggdesigner-algorithm:5.1.5-jhyde jar放入D根目录执行: 以下命令加入本地maven库 mvn install:install-file -DgroupId=org.pentaho -DartifactId=pentaho-aggdesigner-...

    Strut2入门经典笔记(含源代码)

    然而,如果希望在离线环境中工作,可以将DTD文件下载到本地,并更新IDE的设置,使其指向本地DTD文件的位置。这样,即使在没有网络连接的情况下,IDE也能提供完整的代码补全和验证功能。 ### Action名称的搜索顺序 ...

Global site tag (gtag.js) - Google Analytics