在使用dom4j 对 xml文件解析时经常会碰到dtd验证的问题。
像下面的声明:
<?xml version='1.0' encoding='UTF-8'?>
<!DOCTYPE hibernate-configuration PUBLIC
"-//Hibernate/Hibernate Configuration DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">
<hibernate-configuration>
...
在读取的时候会遇到如下错误信息:
org.dom4j.DocumentException: Connection timed out: connect Nested exception: Connection timed out: connect
at org.dom4j.io.SAXReader.read(SAXReader.java:484)
at org.dom4j.io.SAXReader.read(SAXReader.java:264)
解决方法:
reader.setFeature("http://apache.org/xml/features/nonvalidating/load-external-dtd", false);
更多代码如下:
try {
File file = new File("F:/zhucaiguai/hibernate.cfg.xml");
SAXReader reader = new SAXReader();
reader.setFeature("http://apache.org/xml/features/nonvalidating/load-external-dtd", false);
Document doc = reader.read(file);
Element root = doc.getRootElement();
System.out.println(root.asXML());
// OutputFormat format = new OutputFormat();
// XMLWriter output = new XMLWriter(new FileWriter(file), format);// 更新XML文件
// output.write(doc);
// output.close();
} catch (Exception e) {
e.printStackTrace();
}
分享到:
相关推荐
### 解析XML文件(字符串)的两种方法 在软件开发过程中,XML作为一种常见的数据交换格式,在数据传输和存储中扮演着重要角色。...此外,还讨论了如何在使用DOM4J库时忽略DTD验证,这对于提高解析性能非常有帮助。
3. 配置XMLReader:可以设置各种解析器属性,如是否忽略未知命名空间、是否验证文档等。 4. 解析XML文档:调用XMLReader的parse方法,传入XML文档的输入源。 此外,Xerces-J还提供了其他功能,例如DOM解析器,适用...
另一种是忽略DTD文件,只要基本格式正确,就可以进行解析。 就我所知,验证的解析器通常都是比较重量级的。TinyXml不支持验证,但是体积很小,用在解析格式较为简单的XML文件,比如配置文件时,特别的合适。
此外,DOM解析器支持DTD(Document Type Definition)和XML Schema进行验证,可以通过调用`setValidating()`和`setIgnoringElementContentWhitespace()`方法来开启或关闭验证和忽略元素内容中的空白。 2. SAX解析:...
- **dom4j**:是一个强大的Java XML API,支持DOM、SAX和JDOM,提供了更简单、更面向对象的API来处理XML。 - **jaxb-api**:Java架构XML绑定,用于XML和Java对象间的转换。 - **sax**:Java标准版中的SAX解析库。...
- DOM(Document Object Model)操作:使用DOM4J库解析XML,通过`Document`、`Node`、`Element`、`Attribute`和`Text`对象处理XML结构。 - CRUD操作:创建、读取、更新和删除XML数据。 **中高级Java工程师面试知识...
- **DTD(Document Type Definition)**:nekohtml支持对HTML和XHTML DTD的理解,可以验证文档是否符合指定的DTD。 - **Entity Resolver**:nekohtml允许用户自定义实体解析器,处理HTML中的特殊字符或外部引用。 ...
需要注意的是,虽然Java标准库提供了这些功能,但在某些情况下,如处理大型XML文件或需要更高级的功能(如XPath查询),可能需要引入如Apache DOM4J或JDOM等第三方库,它们提供了更高效、更易用的API。 在提供的`...
- 优点:功能强大,支持完整的XML DOM操作,可以处理复杂的XML结构,包括命名空间和DTD验证。 - 缺点:内存消耗较大,因为整个文档被加载到内存,处理大型XML文件时可能会遇到性能问题。 - 示例: ```php $doc ...
2. 设置XMLReader的各种属性,如是否忽略空白文本、是否验证XML等。 3. 实现ContentHandler、EntityResolver、DTDHandler和ErrorHandler接口,并注册到XMLReader中。 4. 使用XMLReader的`parse`方法开始解析XML输入...
它不验证XML文档,忽略DTD,但会检查文档的结构完整性。如果XML文档格式不正确,解析过程将终止并返回错误信息。由于事件驱动的机制,Expat解析速度快,适用于处理大型XML文档。然而,它不支持对XML结构的动态修改和...
- 然后,设置解析器的属性,例如是否忽略XML声明,是否验证文档等。 - 接着,通过解析器的`parse()`方法,指定要解析的XML文件。 - 在解析过程中,解析器会调用预先定义好的事件处理器接口,如`ContentHandler`和...
XML处理器可以根据需求配置为进行验证(检查文档是否符合DTD或Schema定义)或不进行验证。 ##### 5.2 使用 XML 处理器 使用XML处理器可以读取、解析和操作XML文档。常见的处理器包括DOM解析器和SAX解析器。 #### 6...
.NET框架还提供了处理DTD和XML Schema(XSD)的类,如`XmlSchema`和`XmlSchemaSet`,用于验证XML文档是否符合预定义的规则。 总的来说,C# XML类库为XML处理提供了全面的支持,无论是简单的数据交换还是复杂的文档...
2. **设置解析选项**:在开始解析之前,可以通过XMLReader设置各种选项,例如是否忽略白色空格、是否验证DTD(文档类型定义)等。 3. **打开和读取流**:XMLReader需要一个输入源,可以是一个文件、网络流或其他...
PHP中的XML Expat解析器就是一种基于事件的解析器,它不需要进行有效性验证(即忽略DTD声明),因此执行速度快且体积轻巧,非常适合用于PHP开发的Web应用。Expat解析器能够快速解析良好的XML文档,并且遇到不良的XML...