- 浏览: 187221 次
- 性别:
- 来自: 北京
文章分类
最新评论
-
di1984HIT:
记录一下。嘿嘿
eclipse中关闭js报错的方法 -
di1984HIT:
谢谢,学习了
jdk输出带缩进格式xml的方法 -
雪狐狼:
为何,每次查询需要 构建datatable?
YUI DataTable 服务器端翻页与排序 -
lijunwyf41:
nd:"nd", // 表示已经发送请求的 ...
jqGrid <-- json --> spring,hibernate之服务器端分页,排序 -
yiyu:
最近不看YUI了,发现一个国产的前端框架,是金蝶出的,叫Ope ...
YUI 3 学习笔记(5)- Attribute类
今天遇到一个问题,我使用dom4j读取一个xml文件的内容,该xml文件中指定了一个dtd文件,而我并没有这个dtd文
件,在我用SAXReader读取xml文件时,便报如下错误:
看来,是xerces自动进行了语法检查,其实这个xml文件是合法的,我这是想读取其中一些数据,并不想做validation,而
且我也不能删除xml中的对dtd的引用,我想,只要关闭默认的语法检查就可以了。查了查dom4j的文档,我把能想到的设置
都关闭了:
可是,仍然不行,没办法,只好跟踪源码了,最后在xerces的XMLDocumentScannerImpl里发现了这段代码:
需要把fValidation和fLoadExternalDTD都设成false才行,继续研究代码,最后终于找到了解决办法:
其中setValidation(false);可以将fValidation设置成false,setFeature("http://apache.org/xml/features/
nonvalidating/load-external-dtd", false);将fLoadExternalDTD设置成false。
希望对其他遇到同样问题的人有些帮助。
件,在我用SAXReader读取xml文件时,便报如下错误:
java.io.FileNotFoundException: [dtd文件名] (The system cannot find the file specified) at java.io.FileInputStream.open(Native Method) at java.io.FileInputStream.<init>(FileInputStream.java:106) at java.io.FileInputStream.<init>(FileInputStream.java:66) at sun.net.www.protocol.file.FileURLConnection.connect(FileURLConnection.java:70) at sun.net.www.protocol.file.FileURLConnection.getInputStream(FileURLConnection.java:161) at com.sun.org.apache.xerces.internal.impl.XMLEntityManager.setupCurrentEntity(XMLEntityManager.java:653) at com.sun.org.apache.xerces.internal.impl.XMLEntityManager.startEntity(XMLEntityManager.java:1315) at com.sun.org.apache.xerces.internal.impl.XMLEntityManager.startDTDEntity(XMLEntityManager.java:1282) at com.sun.org.apache.xerces.internal.impl.XMLDTDScannerImpl.setInputSource(XMLDTDScannerImpl.java:283) at com.sun.org.apache.xerces.internal.impl.XMLDocumentScannerImpl$DTDDriver.dispatch(XMLDocumentScannerImpl.java:1192) at com.sun.org.apache.xerces.internal.impl.XMLDocumentScannerImpl$DTDDriver.next(XMLDocumentScannerImpl.java:1089) at com.sun.org.apache.xerces.internal.impl.XMLDocumentScannerImpl$PrologDriver.next(XMLDocumentScannerImpl.java:1002) at com.sun.org.apache.xerces.internal.impl.XMLDocumentScannerImpl.next(XMLDocumentScannerImpl.java:648) at com.sun.org.apache.xerces.internal.impl.XMLNSDocumentScannerImpl.next(XMLNSDocumentScannerImpl.java:140) at com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl.scanDocument(XMLDocumentFragmentScannerImpl.java:510) at com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(XML11Configuration.java:807) at com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(XML11Configuration.java:737) at com.sun.org.apache.xerces.internal.parsers.XMLParser.parse(XMLParser.java:107) at com.sun.org.apache.xerces.internal.parsers.AbstractSAXParser.parse(AbstractSAXParser.java:1205) at com.sun.org.apache.xerces.internal.jaxp.SAXParserImpl$JAXPSAXParser.parse(SAXParserImpl.java:522) at org.dom4j.io.SAXReader.read(SAXReader.java:465) at org.dom4j.io.SAXReader.read(SAXReader.java:321)
看来,是xerces自动进行了语法检查,其实这个xml文件是合法的,我这是想读取其中一些数据,并不想做validation,而
且我也不能删除xml中的对dtd的引用,我想,只要关闭默认的语法检查就可以了。查了查dom4j的文档,我把能想到的设置
都关闭了:
reader.setValidation(false); reader.setIncludeInternalDTDDeclarations(false); reader.setIncludeExternalDTDDeclarations(false); reader.setFeature("http://apache.org/xml/features/validation", false);
可是,仍然不行,没办法,只好跟踪源码了,最后在xerces的XMLDocumentScannerImpl里发现了这段代码:
if (((fValidation || fLoadExternalDTD) && (fValidationManager == null || !fValidationManager.isCachedDTD()))) { // This handles the case of a DOCTYPE that had neither an internal subset or an external subset. fDTDScanner.setInputSource(fExternalSubsetSource); fExternalSubsetSource = null; if (!fDisallowDoctype) setScannerState(SCANNER_STATE_DTD_EXTERNAL_DECLS); else setScannerState(SCANNER_STATE_PROLOG); setDriver(fContentDriver); if(fDTDDriver == null) fDTDDriver = new DTDDriver(); return fDTDDriver.next(); }
需要把fValidation和fLoadExternalDTD都设成false才行,继续研究代码,最后终于找到了解决办法:
SAXReader reader = new SAXReader(false); reader.setValidation(false); reader.setFeature("http://apache.org/xml/features/nonvalidating/load-external-dtd", false); Document document = reader.read(xmlFile);
其中setValidation(false);可以将fValidation设置成false,setFeature("http://apache.org/xml/features/
nonvalidating/load-external-dtd", false);将fLoadExternalDTD设置成false。
希望对其他遇到同样问题的人有些帮助。
评论
6 楼
yiyu
2011-01-13
再做一点补充
如果是使用JDK的DocuemntBuilder来读取xml时,可以这样:
如果是使用JDK的DocuemntBuilder来读取xml时,可以这样:
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance(); factory.setAttribute("http://apache.org/xml/features/nonvalidating/load-external-dtd", false); DocumentBuilder builder = factory.newDocumentBuilder(); doc = builder.parse(file);
5 楼
tiger860709
2010-08-10
多谢楼主分享,以前还真没碰到这种情况,不过以后碰到就知道如何处理了
4 楼
Carterslam
2010-08-09
还有一种解决办法:
//加上这一句,可以兼容dtd文件不存在的错误
reader.setEntityResolver(new MyEntityResolver());
public class MyEntityResolver 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()));
}
}
//加上这一句,可以兼容dtd文件不存在的错误
reader.setEntityResolver(new MyEntityResolver());
public class MyEntityResolver 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()));
}
}
3 楼
godtiger
2010-06-22
谢谢 这还是很有用的
2 楼
yiyu
2010-06-21
哦,这样也是可以的呀,多谢赐教。
不过感觉比我的方法复杂了一点,呵呵。
不过感觉比我的方法复杂了一点,呵呵。
1 楼
yxk67
2010-06-21
SAXBuilder builder = new SAXBuilder();
builder.setValidation(false);
builder.setEntityResolver(new EntityResolver() {
public InputSource resolveEntity(String publicId,
String systemId) {
return new InputSource(new StringReader(""));
}
}
);
Document document = builder.build(new File(xmlName));
builder.setValidation(false);
builder.setEntityResolver(new EntityResolver() {
public InputSource resolveEntity(String publicId,
String systemId) {
return new InputSource(new StringReader(""));
}
}
);
Document document = builder.build(new File(xmlName));
发表评论
-
log4j日志中输出sessionID的方法
2015-05-13 19:51 2429在web应用中,如果使用log4j做日志输出时,如果要输出s ... -
jdk输出带缩进格式xml的方法
2011-11-04 16:28 5469jdk自己带有xml处理的功能,好像是用的xerces和xal ... -
JasperReport与spring集成的三种方式
2011-08-10 14:38 16421最近要用JasperReport,试 ... -
jqGrid <-- json --> spring,hibernate之服务器端分页,排序
2011-06-07 16:22 7139最近做了一个以jqGrid实现的数据表格,与服务器端(spri ... -
在javax.servlet.Filter里设置Paramter
2011-02-17 16:04 1262今天碰到一个冷僻的需求,需要在Filter里增加request ... -
WebDav的java客户端开发包:Jackrabbit
2011-01-25 16:39 4781上一篇帖子“WebDav的java客户端开发包:sardine ... -
WebDav的java客户端开发包:sardine
2011-01-24 13:27 6468最近需要对WebDav服务器进行操作,查找了一下,基于java ... -
jquery<--json-->spring(3.0)之DataTables的服务器端翻页
2010-05-15 10:45 5347本文是jquery<--json--> ... -
jquery<--json-->spring(3.0)之后台校验
2010-05-05 17:27 4171前一段试了一下前台用jquery(1.3.2),后台用spri ... -
jquery(1.3.2)<--json-->spring(3.0)
2010-04-23 14:09 4112发现spring 3已经对ajax支持的很好了,前端可以只使用 ... -
使用HTML Parser获取需要HTTP认证的页面的方法
2010-04-09 13:48 1354HTML Parser(http://htmlparser.s ... -
使用javamail通过需要身份验证的smtp服务器发送邮件
2010-04-09 11:51 1754使用javamail发送邮件时,如果smtp服务器需要身份验证 ... -
Hibernate tools使用简介
2009-10-15 11:33 1508简单描述在Eclipse Java EE版中使用Hiberna ... -
关于ProcessBuilder执行dir命令报错
2009-05-15 10:09 2144今天无事,试一下ProcessBuilder,没想到这么一段简 ... -
YUI DataTable 服务器端翻页与排序
2009-01-23 14:45 3375这两天试用了一下YUI的DataTable,翻页和排序都在后台 ... -
使用json-lib的JSONObject.toBean( )时碰到的日期属性转换的问题
2009-01-22 16:21 2880今天碰到这样一个问题: 当前台以JSON格式向后台传递数据的 ... -
YUI + struts2实现基于JSON通讯的AJAX例子
2009-01-08 10:35 2443近来做了个小例子,前端使用YUI,后端使用struts2+sp ... -
Tiles与YUI LayoutManager的结合
2009-01-04 10:16 1565最近在学习YUI,深感功能全面,正在试探是否可以作为页面部分的 ...
相关推荐
Java 读取 XML 文件是 Java 开发中常见的一项任务,XML(eXtensible Markup Language)作为一种可扩展标记语言,广泛用于数据交换、配置存储等领域。本教程将深入讲解如何在 Java 中处理 XML 文件,同时涉及 XML 的 ...
本文将详细介绍如何使用Java来读取和修改XML文件,主要涉及以下几个核心知识点: 1. **DOM解析器**: Document Object Model(DOM)是一种将XML文档转换为内存中的树形结构的方法,使得可以遍历和修改XML文件。...
在Java编程中,读取XML文件是一项常见的任务,特别是在处理配置、数据交换或者存储结构化信息时。XML(eXtensible Markup Language)是一种标记语言,它的设计目标是传输和存储数据,而不是显示数据。本篇文章将深入...
在读写XML时,源码可能会包含验证XML文档是否符合这些规范的代码,例如使用`javax.xml.validation.SchemaFactory`创建一个Schema对象,并用`javax.xml.transform.stream.StreamSource`来读取XML文件进行验证。...
在提供的代码示例中,可能包括了使用上述一种或多种方法来读取XML文件,例如,可能会使用DOM的`DocumentBuilder`解析XML文件,然后使用`Node`接口的方法添加新的元素。具体的实现细节取决于代码内容,可能涉及到创建...
例如,`javax.xml.validation`包提供了XML Schema(XSD)验证的功能,可以确保XML文件符合预定义的模式。而XPath则允许我们方便地查找XML文档中的特定节点。 在Java中写入XML,可以选择使用上述的API将对象序列化为...
在读写XML文件时,可能会遇到各种错误,如文件不存在、格式错误等。因此,处理异常是必要的。使用`try-catch`块捕获`IOException`、`SAXException`等,以确保程序的健壮性。 总结,XML文件操作在Java编程中扮演着...
在使用`SAXReader`或`DocumentHelper`解析XML时,默认情况下会验证DTD(Document Type Definition),这可能会导致解析速度变慢或者因为DTD文件不存在而抛出异常。为了提高效率和避免异常,可以通过设置解析器的相关...
在读取XML属性值时,我们通常会用到以下知识点: 1. XML的基本结构:XML文档由元素、属性、文本、注释等组成。元素是XML文档的核心,它们通过开始标签和结束标签包围内容,如`<element>`...`</element>`。属性是...
5. **读取XML文件并应用验证**:使用XSSFDataValidationHelper和XSSFDataValidationConstraint类读取XML文件并应用数据验证。 ```java import org.apache.poi.ss.util.CellRangeAddress; import org.apache.poi....
5. **字符编码**:XML文件通常使用UTF-8编码,Java在读取或写入文件时需指定正确的编码。使用`InputStreamReader`和`OutputStreamWriter`时,传递`"UTF-8"`作为参数,确保数据正确解码和编码。 6. **XML Schema/DTD...
SAX(Simple API for XML)是一种事件驱动的解析方式,它不将整个XML文档加载到内存,而是逐行读取,遇到每个元素、属性等时触发相应的事件。这种方式适用于处理大型XML文件,以节省内存。在Xerces中,可以使用`org....
另外,`java.util.Properties`类可以方便地读写XML格式的配置文件。 综上所述,XML在Java开发中扮演着重要角色,提供了多种解析和操作方式,开发者可以根据项目需求选择合适的工具和策略。DOM适合小规模且需频繁...
5. **Error Handling**: 在调用`validate()`方法时,可能会抛出`SAXException`和`IOException`。`SAXException`通常表示验证过程中出现错误,而`IOException`可能在读取XML或XSD文件时发生。这些异常应该被捕获并...
6. **事件处理**:`XmlDocument`支持事件处理,如`Load`、`Validation`等,这在处理大型或动态XML时非常有用,可以实时监控文档加载和验证过程。 7. **DTD和XML Schema验证**:`XmlDocument`可以验证XML文档是否...
这种方法节省了内存,但不支持随机访问,更适合处理大型XML文件。 - **SAX解析器优点**:内存效率高,适用于处理大型XML文件。 - **SAX解析器缺点**:不能直接访问和修改文档的任意位置,编程时需要处理事件回调...
DOM解析器适合小型或中型XML文档,但不适用于非常大的文件,因为可能导致内存消耗过大。 3. **JAXB(Java Architecture for XML Binding)**:虽然不在"xml-apis.jar"中,但通常与Java XML处理相关。JAXB允许将XML...
3. **加载XML文档**:使用`Load`方法可以将XML文件加载到`XmlDocument`中: ```vb doc.Load("path_to_xml_file.xml") ``` 4. **解析XML文档**:可以使用XPath表达式查询XML节点。VB.NET中的`SelectNodes`和`...
Java实用工具包中的XML处理是Java开发者经常遇到的一项任务,特别是在处理数据交换、配置文件或者存储结构化数据时。XML(eXtensible Markup Language)因其结构清晰、可读性强的特点,被广泛应用。本工具包专门针对...
它允许开发者以流式的方式读写XML,可以控制解析或生成的进度,避免一次性加载整个文档。主要类包括`javax.xml.stream.XMLInputFactory`、`XMLStreamReader`和`XMLOutputFactory`。 4. JAXB(Java Architecture for...