一个简单的读XML文件的程序报错。请帮忙看看
我用的系统是SCO UNIX (SCO OpenServer 5.0.5),JDK的版本是J2SE 1.3的。因为1.3的版本不支持JAXP的XML处理,所有我有网上下了一个JAXP的包,安装完后写了个程序试一下:
import javax.xml.parsers.*;
import org.w3c.dom.*;
import org.xml.sax.*;
import java.io.*;
public class WebXMLReader
{
private DocumentBuilderFactory factory;
private DocumentBuilder builder;
private Document xmlDoc;
public void getXml()
{
try
{
factory = DocumentBuilderFactory.newInstance();
builder = factory.newDocumentBuilder();
xmlDoc = builder.parse(new FileInputStream(new File("/usr/test/WEB-INF/web.xml")));
Element root = xmlDoc.getDocumentElement();
System.out.println(root.getTagName());
}catch(Exception e)
{
e.printStackTrace();
}
}
public static void main(String args[])
{
WebXMLReader xml = new WebXMLReader();
xml.getXml();
}
}
程序编译通过,但运行就会报错,信息如下:
java.net.UnknownHostException: java.sun.com
at java.net.InetAddress.getAllByName0(InetAddress.java:571)
at java.net.InetAddress.getAllByName0(InetAddress.java:540)
at java.net.InetAddress.getByName(InetAddress.java, Compiled Code)
at java.net.Socket.<init>(Socket.java:100)
at sun.net.NetworkClient.doConnect(NetworkClient.java:50)
at sun.net.www.http.HttpClient.openServer(HttpClient.java:331)
at sun.net.www.http.HttpClient.openServer(HttpClient.java, Compiled Code
)
at sun.net.www.http.HttpClient.<init>(HttpClient.java:267)
at sun.net.www.http.HttpClient.<init>(HttpClient.java:277)
at sun.net.www.http.HttpClient.New(HttpClient.java:289)
at sun.net.www.protocol.http.HttpURLConnection.connect(HttpURLConnection
.java:383)
at sun.net.www.protocol.http.HttpURLConnection.getInputStream(HttpURLCon
nection.java, Compiled Code)
at com.sun.org.apache.xerces.internal.impl.XMLEntityManager.setupCurrent
Entity(Unknown Source)
at com.sun.org.apache.xerces.internal.impl.XMLEntityManager.startEntity(
Unknown Source)
at com.sun.org.apache.xerces.internal.impl.XMLEntityManager.startDTDEnti
ty(Unknown Source)
at com.sun.org.apache.xerces.internal.impl.XMLDTDScannerImpl.setInputSou
rce(Unknown Source)
at com.sun.org.apache.xerces.internal.impl.XMLDocumentScannerImpl$DTDDis
patcher.dispatch(Unknown Source)
at com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImp
l.scanDocument(Unknown Source)
at com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(U
nknown Source)
at com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(U
nknown Source)
at com.sun.org.apache.xerces.internal.parsers.XMLParser.parse(Unknown So
urce)
at com.sun.org.apache.xerces.internal.parsers.DOMParser.parse(Unknown So
urce)
at com.sun.org.apache.xerces.internal.jaxp.DocumentBuilderImpl.parse(Unk
nown Source)
at javax.xml.parsers.DocumentBuilder.parse(DocumentBuilder.java:102)
at WebXMLReader.getXml(WebXMLReader.java:18)
at WebXMLReader.main(WebXMLReader.java:30)
请问是什么原因
问题点数:50、回复次数:4Top
1 楼humanity(城市边缘的狼)回复于 2005-09-12 23:30:51 得分 35
好像尝试 解析 DTD 实体时无法连接到指定 xxx.dtd 。
如果是一个标准的 DTD 前缀,一般 .jar 里面都会有相应的 dtd 文件。
如果没有找到对应的文件那么就会自动到 DTD 声明的 url 去下载 DTD 来验证 。
<!DOCTYPE web-app
PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.2//EN"
"http://java.sun.com/j2ee/dtds/web-app_2_2.dtd"
>
当 这个 web-app 出现时, 解析器会找
"-//Sun Microsystems, Inc.//DTD Web Application 2.2//EN" , 发现这个 没有注册过, 于是找到 "http://java.sun.com/j2ee/dtds/web-app_2_2.dtd" ,准备下载一个来完成验证, 这个 .dtd 文件中有对 web-app 的定义。 通常一般的配置文件读取类都会准备一个 .dtd 或者 .xsd 放在 .jar 中,并且默认看到 "-//Sun Microsystems, Inc.//DTD Web Application 2.2//EN" 时就直接到 .jar 中找, 如果这些写的有些不同,比如大小写不同,空格不一样多等 , 就会出现找不到,于是尝试到互联网上找,当然你如果这样改也行:
<!DOCTYPE web-app
PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.2//EN"
"file:/D:/JavaEnv/dtds/web-app_2_2.dtd"
>Top
2 楼leisureftso()回复于 2005-09-13 14:59:06 得分 0
<!DOCTYPE web-app
PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.2//EN"
"http://java.sun.com/j2ee/dtds/web-app_2_2.dtd"
>
如果我把web.xml中的这一行删掉会怎么样Top
3 楼java_augur(听着音乐 ☆☆☆☆☆☆)回复于 2005-09-14 06:42:18 得分 10
没事Top
4 楼panpass(发了几个招聘帖子,信誉分就没了:()回复于 2005-11-18 22:00:06 得分 5
heheTop




