Dom4j SAXReader Constructors
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的更多相关文章
- 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 ...
- JavaWeb知识点总结
>一: 创建Web项目项目说明:1.java Resources:java源文件2.WebContent:网页内容html.css.js.jsp.资源.配置文件等 HTML:Hyper Text ...
- Spring源码试读--BeanFactory模拟实现
动机 现在Springboot越来越便捷,如果简单的Spring应用,已无需再配置xml文件,基本可以实现全注解,即使是SpringCloud的那套东西,也都可以通过yaml配置完成.最近一年一直在用 ...
- java解析XML saxReader.read(xml) 错误:org.dom4j.DocumentException: no protocol
java解析XML saxReader.read(xml) 错误:org.dom4j.DocumentException: no protocol 完整错误信息: org.dom4j.Document ...
- 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 ...
- 使用dom4j中SAXReader解析xml数据
public ApiConfig(String configFilePath) throws DocumentException{ SAXReader reader = new SAXReader() ...
- XML技术之DOM4J解析器
由于DOM技术的解析,存在很多缺陷,比如内存溢出,解析速度慢等问题,所以就出现了DOM4J解析技术,DOM4J技术的出现大大改进了DOM解析技术的缺陷. 使用DOM4J技术解析XML文件的步骤? pu ...
- 四种解析和创建方式(DOM,SAX,DOM4J,JDOM)
一.先导入jar包 DOM基于树形,SAX基于事件,DOM4J和JDOM基于底层API 二.代码如下 1 package com.sxt.test; import java.io.File; impo ...
- dom4j的小例子
1.要解析的xml文件book.xml <?xml version="1.0" encoding="UTF-8"?> <books> & ...
随机推荐
- HDU 4740 模拟题意
九野的博客,转载请注明出处:http://blog.csdn.net/acmmmm/article/details/11711743 题意:驴和老虎在方格中跑,跑的方式:径直跑,若遇到边界或之前走过的 ...
- tweenanim动画
1.视图 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:too ...
- uva 10330 - Power Transmission(网络流)
uva 10330 - Power Transmission 题目大意:最大流问题. 解题思路:増广路算法. #include <stdio.h> #include <string. ...
- 用来解析,格式化,存储和验证国际电话号码:libphonenumber
用来解析,格式化,存储和验证国际电话号码:libphonenumber libphonenumber是Google的公共Java.C++和Javascript库用来解析,格式化,存储和验证国际电话号码 ...
- centos7安装codeblocks教程
author:lidabo 装了好多次系统,每次装的时候都有要在网上各种查,太麻烦了.所以决定记录一下,以后用到的时候会方便一些.当然,本文来源于网络,取百家之长,最重要的是本人已验证过,说明对本系统 ...
- PHP - 验证用户名
/** * * 函数名:_check_username($user_str,$min_num,$max_num); * 作用:检测用户名是否符合格式 * 参数: * 1:用户名 * 2:不得小于多少位 ...
- SQL模板和模板实例化
需求:需要得出一个数据源DataTable,我已知SQL和HttpRequest如何,通过SQL模板的方式去实例化匹配HttpRequest中的参数实例化为查询SQL,最后返回DataTable 1. ...
- 程序启动报错:ORA-12505;PL/SQL却可以登录的解决方法
一.异常{ ORA-12505, TNS:listener does not currently know of SID given in connect descriptor The Connect ...
- Properties文件及与之相关的System.getProperties操作(转)
如何使用Java读写系统属性? 读: 简述properties文件的结构和基本用法结构:扩展名为properties的文件,内容为key.value的映射,例如"a=2" 示例用到 ...
- VC Office2007界面对话框实现
我们知道VS2008SP1之后,MFC就多了一个功能包,可以快速的建立一个ribbon的界面,视觉样式可以在office 2007蓝.黑等颜色之间切换,这对于单文档/多文档做界面非常方便,而且也蛮好看 ...