Dom4j读取xml:
eg1:

package xml;

import java.io.File;

import org.dom4j.DocumentException;
import org.dom4j.io.SAXReader; public class XmlReader_Dom4j {
public static void main(String[] args) {
String path = "D:\\test\\中文文件夹名\\namespaces.xml";
readXml(path);//will throw exception
File xmlFile=new File(path);
readXml(xmlFile);
path = "D:\\test\\path withWhiteSpace\\namespaces.xml";
readXml(path); path = "D:\\test\\normal\\namespaces.xml";
readXml(path);
} private static void readXml(String path) {
SAXReader saxReader=new SAXReader();
try {
saxReader.read(path);
System.out.println("success");
} catch (DocumentException e) {
e.printStackTrace();
}
} private static void readXml(File xmlFile) {
SAXReader saxReader=new SAXReader();
try {
saxReader.read(xmlFile);
System.out.println("success");
} catch (DocumentException e) {
e.printStackTrace();
}
} }

Output:

org.dom4j.DocumentException: unknown protocol: d Nested exception: unknown protocol: d
at org.dom4j.io.SAXReader.read(SAXReader.java:484)
at org.dom4j.io.SAXReader.read(SAXReader.java:321)
at xml.XmlReader_Dom4j.readXml(XmlReader_Dom4j.java:24)
at xml.XmlReader_Dom4j.main(XmlReader_Dom4j.java:11)
Nested exception:
java.net.MalformedURLException: unknown protocol: d
at java.net.URL.<init>(Unknown Source)
at java.net.URL.<init>(Unknown Source)
at java.net.URL.<init>(Unknown Source)
at com.sun.org.apache.xerces.internal.impl.XMLEntityManager.setupCurrentEntity(Unknown Source)
at com.sun.org.apache.xerces.internal.impl.XMLVersionDetector.determineDocVersion(Unknown Source)
at com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(Unknown Source)
at com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(Unknown Source)
at com.sun.org.apache.xerces.internal.parsers.XMLParser.parse(Unknown Source)
at com.sun.org.apache.xerces.internal.parsers.AbstractSAXParser.parse(Unknown Source)
at com.sun.org.apache.xerces.internal.jaxp.SAXParserImpl$JAXPSAXParser.parse(Unknown Source)
at org.dom4j.io.SAXReader.read(SAXReader.java:465)
at org.dom4j.io.SAXReader.read(SAXReader.java:321)
at xml.XmlReader_Dom4j.readXml(XmlReader_Dom4j.java:24)
at xml.XmlReader_Dom4j.main(XmlReader_Dom4j.java:11)
Nested exception: java.net.MalformedURLException: unknown protocol: d
at java.net.URL.<init>(Unknown Source)
at java.net.URL.<init>(Unknown Source)
at java.net.URL.<init>(Unknown Source)
at com.sun.org.apache.xerces.internal.impl.XMLEntityManager.setupCurrentEntity(Unknown Source)
at com.sun.org.apache.xerces.internal.impl.XMLVersionDetector.determineDocVersion(Unknown Source)
at com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(Unknown Source)
at com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(Unknown Source)
at com.sun.org.apache.xerces.internal.parsers.XMLParser.parse(Unknown Source)
at com.sun.org.apache.xerces.internal.parsers.AbstractSAXParser.parse(Unknown Source)
at com.sun.org.apache.xerces.internal.jaxp.SAXParserImpl$JAXPSAXParser.parse(Unknown Source)
at org.dom4j.io.SAXReader.read(SAXReader.java:465)
at org.dom4j.io.SAXReader.read(SAXReader.java:321)
at xml.XmlReader_Dom4j.readXml(XmlReader_Dom4j.java:24)
at xml.XmlReader_Dom4j.main(XmlReader_Dom4j.java:11)
success
success
success

Source code:

    /**
* <p>
* Reads a Document from the given URL or filename using SAX.
* </p>
*
* <p>
* If the systemId contains a <code>':'</code> character then it is
* assumed to be a URL otherwise its assumed to be a file name. If you want
* finer grained control over this mechansim then please explicitly pass in
* either a {@link URL}or a {@link File}instance instead of a {@link
* String} to denote the source of the document.
* </p>
*
* @param systemId
* is a URL for a document or a file name.
*
* @return the newly created Document instance
*
* @throws DocumentException
* if an error occurs during parsing.
*/
public Document read(String systemId) throws DocumentException {
InputSource source = new InputSource(systemId);
if (this.encoding != null) {
source.setEncoding(this.encoding);
} return read(source);
}

eg2:

    private static void testWithUrl() throws MalformedURLException {
System.out.println("=============testWithUrlBegin============="); String path = "file:///D:\\test\\中文文件夹名\\namespaces.xml";
newUrl(path);
readXml(path); path = "D:\\test\\中文文件夹名\\namespaces.xml";
newUrl(path); System.out.println("=============testWithUrlEnd=============");
} private static void newUrl(String path) throws MalformedURLException {
try {
new URL(path);
} catch (Exception e) {
e.printStackTrace();
}
} private static void readXml(String path) {
SAXReader saxReader=new SAXReader();
try {
Document document=saxReader.read(path);
System.out.println("document.hasContent():"+document.hasContent());
System.out.println("success");
} catch (DocumentException e) {
e.printStackTrace();
}
}

Output:

=============testWithUrlBegin=============
document.hasContent():true
success
java.net.MalformedURLException: unknown protocol: d
at java.net.URL.<init>(Unknown Source)
at java.net.URL.<init>(Unknown Source)
at java.net.URL.<init>(Unknown Source)
at xml.XmlReader_Dom4j.newUrl(XmlReader_Dom4j.java:50)
at xml.XmlReader_Dom4j.testWithUrl(XmlReader_Dom4j.java:43)
at xml.XmlReader_Dom4j.main(XmlReader_Dom4j.java:13)
=============testWithUrlEnd=============

saxReader.read(xmlFile)不报错的原因:

    /**
* <p>
* Reads a Document from the given <code>File</code>
* </p>
*
* @param file
* is the <code>File</code> to read from.
*
* @return the newly created Document instance
*
* @throws DocumentException
* if an error occurs during parsing.
*/
public Document read(File file) throws DocumentException {
try {
/*
* We cannot convert the file to an URL because if the filename
* contains '#' characters, there will be problems with the URL in
* the InputSource (because a URL like
* http://myhost.com/index#anchor is treated the same as
* http://myhost.com/index) Thanks to Christian Oetterli
*/
InputSource source = new InputSource(new FileInputStream(file));
if (this.encoding != null) {
source.setEncoding(this.encoding);
}
String path = file.getAbsolutePath(); if (path != null) {
// Code taken from Ant FileUtils
StringBuffer sb = new StringBuffer("file://"); // add an extra slash for filesystems with drive-specifiers
if (!path.startsWith(File.separator)) {
sb.append("/");
} path = path.replace('\\', '/');
sb.append(path); source.setSystemId(sb.toString());
} return read(source);
} catch (FileNotFoundException e) {
throw new DocumentException(e.getMessage(), e);
}
}

java.net.URL.java中抛异常的位置:

    /**
* Creates a <code>URL</code> object from the specified
* <code>protocol</code>, <code>host</code>, <code>port</code>
* number, <code>file</code>, and <code>handler</code>. Specifying
* a <code>port</code> number of <code>-1</code> indicates that
* the URL should use the default port for the protocol. Specifying
* a <code>handler</code> of <code>null</code> indicates that the URL
* should use a default stream handler for the protocol, as outlined
* for:
* java.net.URL#URL(java.lang.String, java.lang.String, int,
* java.lang.String)
*
* <p>If the handler is not null and there is a security manager,
* the security manager's <code>checkPermission</code>
* method is called with a
* <code>NetPermission("specifyStreamHandler")</code> permission.
* This may result in a SecurityException.
*
* No validation of the inputs is performed by this constructor.
*
* @param protocol the name of the protocol to use.
* @param host the name of the host.
* @param port the port number on the host.
* @param file the file on the host
* @param handler the stream handler for the URL.
* @exception MalformedURLException if an unknown protocol is specified.
* @exception SecurityException
* if a security manager exists and its
* <code>checkPermission</code> method doesn't allow
* specifying a stream handler explicitly.
* @see java.lang.System#getProperty(java.lang.String)
* @see java.net.URL#setURLStreamHandlerFactory(
* java.net.URLStreamHandlerFactory)
* @see java.net.URLStreamHandler
* @see java.net.URLStreamHandlerFactory#createURLStreamHandler(
* java.lang.String)
* @see SecurityManager#checkPermission
* @see java.net.NetPermission
*/
public URL(String protocol, String host, int port, String file,
URLStreamHandler handler) throws MalformedURLException {
if (handler != null) {
SecurityManager sm = System.getSecurityManager();
if (sm != null) {
// check for permission to specify a handler
checkSpecifyHandler(sm);
}
} protocol = protocol.toLowerCase();
this.protocol = protocol;
if (host != null) { /**
* if host is a literal IPv6 address,
* we will make it conform to RFC 2732
*/
if (host != null && host.indexOf(':') >= 0
&& !host.startsWith("[")) {
host = "["+host+"]";
}
this.host = host; if (port < -1) {
throw new MalformedURLException("Invalid port number :" +
port);
}
this.port = port;
authority = (port == -1) ? host : host + ":" + port;
} Parts parts = new Parts(file);
path = parts.getPath();
query = parts.getQuery(); if (query != null) {
this.file = path + "?" + query;
} else {
this.file = path;
}
ref = parts.getRef(); // Note: we don't do validation of the URL here. Too risky to change
// right now, but worth considering for future reference. -br
if (handler == null &&
(handler = getURLStreamHandler(protocol)) == null) {
throw new MalformedURLException("unknown protocol: " + protocol);
}
this.handler = handler;
}

Dom4j SAXReader Constructors的更多相关文章

  1. How to Validate XML using Java

    Configure Java APIs (SAX, DOM, dom4j, XOM) using JAXP 1.3 to validate XML Documents with DTD and Sch ...

  2. JavaWeb知识点总结

    >一: 创建Web项目项目说明:1.java Resources:java源文件2.WebContent:网页内容html.css.js.jsp.资源.配置文件等 HTML:Hyper Text ...

  3. Spring源码试读--BeanFactory模拟实现

    动机 现在Springboot越来越便捷,如果简单的Spring应用,已无需再配置xml文件,基本可以实现全注解,即使是SpringCloud的那套东西,也都可以通过yaml配置完成.最近一年一直在用 ...

  4. java解析XML saxReader.read(xml) 错误:org.dom4j.DocumentException: no protocol

    java解析XML saxReader.read(xml) 错误:org.dom4j.DocumentException: no protocol 完整错误信息: org.dom4j.Document ...

  5. Handler dispatch failed; nested exception is java.lang.NoClassDefFoundError: org/dom4j/io/SAXReader

    Handler dispatch failed; nested exception is java.lang.NoClassDefFoundError: org/dom4j/io/SAXReader ...

  6. 使用dom4j中SAXReader解析xml数据

    public ApiConfig(String configFilePath) throws DocumentException{ SAXReader reader = new SAXReader() ...

  7. XML技术之DOM4J解析器

    由于DOM技术的解析,存在很多缺陷,比如内存溢出,解析速度慢等问题,所以就出现了DOM4J解析技术,DOM4J技术的出现大大改进了DOM解析技术的缺陷. 使用DOM4J技术解析XML文件的步骤? pu ...

  8. 四种解析和创建方式(DOM,SAX,DOM4J,JDOM)

    一.先导入jar包 DOM基于树形,SAX基于事件,DOM4J和JDOM基于底层API 二.代码如下 1 package com.sxt.test; import java.io.File; impo ...

  9. dom4j的小例子

    1.要解析的xml文件book.xml <?xml version="1.0" encoding="UTF-8"?> <books> & ...

随机推荐

  1. Eclipse使用技巧总结(三)

    十六.快速关闭窗口   关闭当前打开窗口 Ctrl + W       关闭当前打开的所有窗口 Ctrl +Shift +F4 十九.重命名  F2 二十.快速回到上次编辑点  Ctrl + Q 二十 ...

  2. Jsp分页实例---真分页

    网页的分页功能的实现比较简单,实现方法也多种多样. 今天总结一个简单的Jsp真分页实例. 首先,提到分页就要先明确一个概念,何为真分页何谓假分页. 假分页:一次性从数据库读出表的所有数据一次性的返回给 ...

  3. JavaScript DOM省市自适配select菜单

    <html> <head> <meta charset="UTF-8"> <meta name="Generator" ...

  4. VirtualBox开发环境的搭建详解

    有关VirtualBox的介绍请参考:VirtualBox_百度百科 由于VirtualBox官网提供的搭建方法不够详细,而且本人在它指导下,从下载所需的开发包,到最后生成二进制文件,中间遇到了许多的 ...

  5. SQLite数据库框架ORMLite与GreenDao的简单比较

    笔记摘要:最近准备使用数据库做个缓存,以前因为项目中的实时性要求比较高,所以在整体的框架中就没有加缓存,有些地方只 是简单的将对象保存到了Preference中,所以并没有对数据库方面有所研究,既然准 ...

  6. GPSR协议移植

    修改的文件有packet.h.cmu-trace.cc.priqueue.cc.ns-packet.tcl.Makefile 1.在 $HOME/ns-allinone-2.29/ns-2.29下新建 ...

  7. 基于visual Studio2013解决C语言竞赛题之0901文件读写

       题目

  8. Oracle单表的简单查询

    Oracle单表的简单查询 查看表结构 desc emp; 查询所有列 Select * from emp; 查找所以部门编号(查指定的列) select deptnofrom emp; 查找编号不同 ...

  9. codeforces 437C The Child and Toy

    time limit per test 1 second memory limit per test 256 megabytes input standard input output standar ...

  10. JQuery学习(3)

    创建精灵界面导航: 有以下图,合理的布局让图片正确显示: 先写导航栏html代码: <div id="navMenu"> <ul id="spriteN ...