今天因为项目需要,需要解析jetty配置文件jetty.xml。
因为是在无网的情况下做的程序,结果一来就报个错,百思不得其解。
错误信息如下:
java.net.UnknownHostException: jetty.mortbay.org
at java.net.PlainSocketImpl.connect(Unknown Source)
at java.net.Socket.connect(Unknown Source)
at java.net.Socket.connect(Unknown Source)
at sun.net.NetworkClient.doConnect(Unknown Source)
at sun.net.www.http.HttpClient.openServer(Unknown Source)
at sun.net.www.http.HttpClient.openServer(Unknown Source)
at sun.net.www.http.HttpClient.<init>(Unknown Source)
at sun.net.www.http.HttpClient.New(Unknown Source)
at sun.net.www.http.HttpClient.New(Unknown Source)
at sun.net.www.protocol.http.HttpURLConnection.getNewHttpClient(Unknown Source)
at sun.net.www.protocol.http.HttpURLConnection.plainConnect(Unknown Source)
at sun.net.www.protocol.http.HttpURLConnection.connect(Unknown Source)
at sun.net.www.protocol.http.HttpURLConnection.getInputStream(Unknown Source)
at com.sun.org.apache.xerces.internal.impl.XMLEntityManager.setupCurrentEntity(Unknown Source)
at com.sun.org.apache.xerces.internal.impl.XMLEntityManager.startEntity(Unknown Source)
at com.sun.org.apache.xerces.internal.impl.XMLEntityManager.startDTDEntity(Unknown Source)
at com.sun.org.apache.xerces.internal.impl.XMLDTDScannerImpl.setInputSource(Unknown Source)
at com.sun.org.apache.xerces.internal.impl.XMLDocumentScannerImpl$DTDDispatcher.dispatch(Unknown Source)
at com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl.scanDocument(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.DOMParser.parse(Unknown Source)
at com.sun.org.apache.xerces.internal.jaxp.DocumentBuilderImpl.parse(Unknown Source)
at javax.xml.parsers.DocumentBuilder.parse(Unknown Source)
at com.dir.MyDomXmlReader.<init>(MyDomXmlReader.java:46)
at com.dir.SystemFileMove.moveSystemFile(SystemFileMove.java:18)
at com.dir.run.main(run.java:8)
后来上google搜索,却没有找到什么解决办法。
后来几经折磨,终于判断为找不到dtd文件导致。
再次上网找寻解决办法如下,在方法中加入注释部分,即可。
其中的
String dtd_uri = "configure_1_2.xml";
为从xml描述里dtd uri 下载到的文件,存放在本地与类同一个目录下。
这样在断网的情况下运行,也不会报错了。
package com.dir;
import java.io.File;
import java.io.IOException;
import java.io.InputStream;
import java.util.ArrayList;
import java.util.List;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.ParserConfigurationException;
import org.w3c.dom.Document;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;
import org.xml.sax.EntityResolver;
import org.xml.sax.InputSource;
import org.xml.sax.SAXException;
public class MyDomXmlReader {
private List<List> _systemPath = new ArrayList<List>();
public MyDomXmlReader() {
DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
try {
// 通过文档构建器工厂获取一个文档构建器
DocumentBuilder db = dbf.newDocumentBuilder();
// db.setEntityResolver(new EntityResolver() {
// public InputSource resolveEntity(String publicId,
// String systemId) throws SAXException, IOException {
//
// String dtd_uri = "configure_1_2.xml";
// InputStream dtd_stream = this.getClass()
// .getResourceAsStream(dtd_uri);
// return new InputSource(dtd_stream);
//
// }
// });
File f = new File("D:/work/cqjyj/develope/etc/jetty.xml");
// 通过文档通过文档构建器构建一个文档实例
Document doc = db.parse(f);
NodeList configureNodeList = doc.getElementsByTagName("Configure");
Node configureNode;
if (configureNodeList.getLength() == 1) {
configureNode = configureNodeList.item(0);
} else {
throw new Exception();
}
NodeList nodeCallList = configureNode.getChildNodes();
int nodeCallSize = nodeCallList.getLength();
Node nodeCall;
NodeList childsOfNodeCallList;
Node childsOfNodeCall;
int childsOfNodeCallSize;
int sum = 0;
List<String> twoPath;
for (int i = 0; i < nodeCallSize; i++) {
twoPath = new ArrayList<String>(2);
nodeCall = nodeCallList.item(i);
if ("Call".equals(nodeCall.getNodeName())) {
if ("addWebApplication".equals(nodeCall.getAttributes()
.getNamedItem("name").getNodeValue())) {
childsOfNodeCallList = nodeCall.getChildNodes();
childsOfNodeCallSize = childsOfNodeCallList.getLength();
for (int j = 0; j < childsOfNodeCallSize; j++) {
childsOfNodeCall = childsOfNodeCallList.item(j);
if ("Arg".equals(childsOfNodeCall.getNodeName())) {
twoPath.add(childsOfNodeCall.getTextContent());
}
}
_systemPath.add(twoPath);
}
}
}
} catch (ParserConfigurationException ex) {
ex.printStackTrace();
} catch (IOException ex) {
ex.printStackTrace();
} catch (SAXException ex) {
ex.printStackTrace();
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
public List<List> get_systemPath() {
return _systemPath;
}
public void set_systemPath(List<List> systemPath) {
_systemPath = systemPath;
}
}
分享到:
相关推荐
在处理XML文件时,DOM解析器会将整个XML文档加载到内存中,形成一个完整的节点树,这样我们就可以通过这个树来查找、修改或遍历XML数据。 XML(eXtensible Markup Language)是一种标记语言,常用于存储和传输结构...
Java DOM 解析 XML 实例是 Java 语言中常用的 XML 解析方法之一,使用 W3C 推荐的文档对象模型(Document Object Model,DOM)来解析 XML 文档。DOM 提供了一个树形结构的对象模型,通过遍历树形结构可以访问和操作 ...
本文将深入探讨如何使用DOM(Document Object Model)解析XML在Android应用中的实践。DOM解析方式允许开发者一次性加载整个XML文档到内存中,形成一个树形结构,便于遍历和操作。尽管对于大型XML文件,DOM解析可能因...
在Android开发中,DOM(Document Object Model)解析是处理XML文档的一种常见方法,它提供了一种结构化的表示XML文档的方式,并允许开发者通过编程接口与XML数据进行交互。本篇文章将深入探讨DOM解析XML文件在...
但需要注意,DOM解析在处理大型XML文件时可能会消耗大量内存,因此在资源有限的环境下,可能需要考虑使用更轻量级的解析方式,如SAX解析。 总结来说,DOM解析XML文件是一种常见的数据处理技术,通过构建内存中的DOM...
在“徐守威”的指导下,这个入门案例将帮助你理解DOM解析XML的基本概念,并通过实际操作提升技能。同时,了解并熟练运用DOM解析,对于处理XML格式的数据,如配置文件、数据交换等场景,都将大有裨益。 标签“徐守威...
### Java DOM 解析 XML 在Java中,DOM(Document Object Model)是一种用于处理XML文档的标准接口。通过DOM,我们可以将整个XML文档加载到内存中,并对其进行读取、修改等操作。这种方式非常适合那些需要对XML文档...
标题中的"DOM_XML.rar"可能是一个包含DOM解析XML相关示例的压缩文件,"DOM_dom xml_dom xml java_dom解析xml_java解析xml"这部分描述了文件的主要内容,即关于DOM(Document Object Model)在XML解析中的应用,特别...
在Java平台上,DOM解析器提供了对XML文档的全面和结构化的访问。 使用DOM解析XML的基本步骤如下: 1. **导入必要的库**:在Java中,DOM解析功能主要由`javax.xml.parsers`和`org.w3c.dom`包提供。因此,首先需要在...
在XML解析领域,DOM4J主要涉及以下知识点: 1. **DOM4J API**:DOM4J提供了一组直观的类和接口来操作XML文档,如`Element`代表XML元素,`Attribute`代表属性,`Document`表示整个XML文档,还有`Namespace`处理命名...
在Android中,我们主要使用Java的标准库`javax.xml.parsers.DocumentBuilderFactory`和`org.w3c.dom.Document`来实现DOM解析。这些库提供了创建DOM解析器、解析XML文件和操作XML节点的功能。 ### 3. 实现步骤 ####...
DOM解析XML和创建XML是Web开发中的基础技能,尤其在处理动态数据和接口交互时,理解并掌握DOM与XML的结合应用至关重要。在实际项目中,我们可能还需要结合其他技术,如XSLT(用于转换XML)和XPath(用于在XML文档中...
在Java中,解析XML文档有多种方式,其中DOM(Document Object Model)和SAX(Simple API for XML)是最常见的两种。DOM是一种基于树形结构的XML处理方式,它将整个XML文档加载到内存中,形成一个完整的对象模型,...
在 Java 中,DOM 解析允许开发者将整个 XML 文件加载到内存中,形成一个树形结构,然后通过这个结构来访问和操作 XML 的各个部分。 首先,我们需要引入 Java 的核心解析库,即 javax.xml.parsers 命名空间。这个库...
以一个实例来说明DOM解析XML文件的方法与过程。
对于这种情况,可以考虑使用SAX(Simple API for XML)或StAX(Streaming API for XML)等基于事件的解析器,它们不需要一次性加载整个文档到内存。 6. **应用场景**: - 数据交换:XML常用于跨平台、跨语言的数据...
在Java中,解析XML文件是常见的任务,通常有DOM(Document Object Model)和DOM4J两种方式。下面我们将详细探讨这两种解析方法。 DOM解析方式是将整个XML文件加载到内存中,形成一棵DOM树,每个节点代表XML文档的一...
在Android 4.0及以上版本,我们可以使用内置的Java XML DOM API来实现XML解析。下面将详细介绍在Android中使用DOM解析XML的基本步骤和关键知识点。 1. **导入XML解析库** 在Android项目中,我们不需要额外导入库,...
在Java环境中,处理XML文件通常涉及到DOM(Document Object Model)解析器。"dom.jar"是一个包含Java DOM API实现的库,它是Java标准版(Java SE)的一部分,用于解析XML文档并将其转换为内存中的树形结构。 DOM...