最近在做一个解析XML的功能,功能测试无问题。一次偶然的情况发现在断网情况,老是报解柝失败。研究最后原来是dom解析器在解析XML头DTD,会向DTD上的服务地址请求,在联网环境正常,在断网环境无响应,导致解析失败。研究了相关的API,在百度搜索了一把,找到以下解决方案:
需要设置DocumentBuilderFactory.setValidating(false)就可以达到效果了,但是解析器还是会读取DTD的,解决的方法是实现EntityResolver接口,具体代码如下:
class IgnoreDTDEntityResolver implements EntityResolver
{
public InputSource resolveEntity(String publicId, String systemId)
throws SAXException, IOException
{
return new InputSource(new ByteArrayInputStream(
"<?xml version='1.0' encoding='UTF-8'?>".getBytes()));
}
}
/**
* 获取Document对象
* @param xmlPath
* @return
*/
public static Document getDocument(String xmlPath)
{
SAXReader reader = new SAXReader();
reader.setValidation(false);
try
{
reader.setEntityResolver(new IgnoreDTDEntityResolver());
return reader.read(new File(xmlPath));
}
catch(DocumentException e)
{
throw new java.lang.IllegalArgumentException("Can't parse the XML!");
}
}
分享到:
相关推荐
### DOM4J解析XML时DTD路径问题 在处理XML文件时,经常需要用到DOM4J这样的库来进行解析。当XML文件包含DTD(Document Type Definition)声明时,DOM4J默认会尝试从指定的URL加载DTD文件来进行验证。这通常是为了...
### DOM4J解析XML详解 #### 一、DOM4J简介与特性 DOM4J是一个由dom4j.org开发的开源XML解析包,专为Java平台设计,它不仅支持DOM、SAX和JAXP标准,还巧妙地融入了Java集合框架,使其成为Java开发者在处理XML数据时...
DTD 定义 XML DOM4J 解析 XML 小类 XML 文档类型定义(DTD)是用来定义一段合法的 XML 文档块的。它用来验证你的 XML 文档是以一系列合法的元素构成的。DTD 可以在 XML 文档内部定义,也可以通过外部文件的方式引入...
这个“dom4j解析xml例子”压缩包应该包含了一些示例代码、帮助文档和使用说明,旨在帮助初学者快速理解和应用DOM4J。 在XML解析领域,DOM(Document Object Model)是一种将XML文档转换为内存对象树的方法。DOM4J是...
DOM4J和JAXEN是Java中解析XML的两个重要库,它们在处理XML文档时提供了强大的功能。这里我们将深入探讨这两个库的核心概念、用途以及它们如何协同工作。 DOM4J是一个灵活且功能丰富的XML库,它完全支持JAXP(Java ...
DOM4J作为一个解析器,它的主要功能包括读取XML文档、遍历XML结构、查找特定元素、修改元素内容以及创建新的XML文档。 首先,解析XML文件通常从构建Document对象开始。在DOM4J中,我们可以使用SAXReader类来实现这...
- **XML Schema和DTD验证**:DOM4J还支持对XML文档进行Schema和DTD验证,确保数据的完整性和正确性。 - **XPath查询**:DOM4J支持XPath表达式,使得复杂的数据定位和提取更加容易。 - **事件驱动的解析**:除了基于...
DOM4J不仅提供了基本的XML操作,还支持命名空间、事件处理、DTD和XML Schema验证等功能,是Java开发中处理XML的强大工具。学习和掌握DOM4J,能够极大地提高开发效率,特别是在需要频繁处理XML数据的场景下。
此外,DOM4J还提供了对DTD(Document Type Definition)和XML Schema的支持,以验证XML文档的结构正确性。 DOM4J 2.0.3是更新的版本,它可能包含了更多的优化和新特性,比如对Java 8及更高版本的支持,以及性能上的...
此外,DOM4J还包含了XML Schema和DTD(Document Type Definition)的支持,可以用于验证XML文档是否符合定义的结构。这对于确保数据的准确性和一致性至关重要。 DOM4J-1.6.1.jar是DOM4J的一个版本,发布于2006年。...
DOM4J是一个强大的Java库,专门用于处理XML文档。它提供了灵活、高效的API,使得XML的解析、创建、修改和查询变得简单。这次我们有两个版本的DOM4J库:1.6.1和2.0.0-ALPHA。这两个版本在功能、性能和API设计上都有所...
DOM4J 1.6.1版的API还包括对XML Schema和DTD的支持,可以处理命名空间,提供事件驱动的处理模型,以及XML文档的序列化功能。这些特性使得DOM4J成为Java开发中处理XML的强大工具。 在实际开发中,DOM4J常用于读取...
4. **解析XML**:讲解如何使用DOM4J解析XML文件,包括SAX和DOM两种解析方式,并对比两者的优缺点。 5. **创建XML**:演示如何使用DOM4J创建新的XML文档,包括动态生成和修改XML结构。 6. **遍历与操作**:介绍如何...
这将阻止XML解析器尝试解析任何外部资源,包括DTD。示例如下: ```csharp XmlDocument doc = new XmlDocument(); doc.XmlResolver = null; doc.Load(url); ``` 通过这种方式,`Load`方法将不会尝试加载XML文档中...
#### dom4j解析XML时忽略DTD文件验证 在使用`SAXReader`或`DocumentHelper`解析XML时,默认情况下会验证DTD(Document Type Definition),这可能会导致解析速度变慢或者因为DTD文件不存在而抛出异常。为了提高效率...
1. **XML解析**:DOM4J提供两种主要的解析方式:SAX(Simple API for XML)和DOM。SAX是一种事件驱动的解析器,适合处理大型XML文件,而DOM则构建整个XML文档的树形结构,适用于小型或中型文件。 2. **XPath支持**...
5. **XML文档验证**:DOM4J可以与XML Schema或DTD结合,验证XML文档是否符合预定义的结构规则。 总的来说,DOM4J是一个功能丰富的XML处理库,其灵活性和效率使其成为Java开发者的首选工具之一。配合JAXB,可以...
在本文中,我们将深入探讨如何使用DOM4J来验证XML文档对DTD(Document Type Definition)的符合性,这是一个确保XML文档结构正确的重要步骤。 首先,我们需要理解DTD的作用。DTD是XML文档类型定义,它定义了XML文档...
2. **灵活性**:DOM4J支持多种XML解析方式,包括DOM、SAX和StAX,可以根据需要选择最合适的解析策略。 3. **XPath支持**:DOM4J提供了对XPath的支持,可以方便地通过表达式选取XML文档中的特定部分。 4. **文档建模*...