jdk1.3与jdk1.4以上dtd的规范不一样的。jdk1.3支持2.3规范。1.4版本以上为2.4规范。其差别为开头注释的内容不同。因此需要详细检查你的jdk版本。
2.3规范注释为:<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE web-app PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3/ /EN"
"http://java.sun.com/dtd/web-app_2_3.dtd">
<web-app>
...
</web-app>2.4规范注释为:
<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.4" xmlns="http://java.sun.com/xml/ns/j2ee"
xmlns:xsi=http://www.w3.org/2001/XMLSchema-instance
xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee
http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">
...
</web-app>1.4版本以上不能解释2.3规范的dtd。同样1.3也不能解释2.4规范的dtd。
2.3规范注释为:<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE web-app PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3/ /EN"
"http://java.sun.com/dtd/web-app_2_3.dtd">
<web-app>
...
</web-app>2.4规范注释为:
<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.4" xmlns="http://java.sun.com/xml/ns/j2ee"
xmlns:xsi=http://www.w3.org/2001/XMLSchema-instance
xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee
http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">
...
</web-app>1.4版本以上不能解释2.3规范的dtd。同样1.3也不能解释2.4规范的dtd。
解决方案 »
- 我是真的无奈了....有谁遇到过,给个解答..
- 开贴聊,下个周一就要求上班了,可以没有一点兴奋,求java前辈指教。
- js自动刷新页面,无法与数据库同步,需手动刷新!
- JAVA如何调用这个CLASS?
- 求一个服务器空间网站
- response.setContentType("application/octet-stream");
- spring rmi如何配置多接口
- 有没有好的Struts2的学习资料呀!
- ***jive应该如何看起?***
- 看了有关EJB的资料,可还是弄不清其中的奥妙。能不能给讲一下,在实际例子中是个怎么样的概念?
- 专家,请教严重的RMI问题
- 请帮我看看一个关于iBATIS的简单问题
你给的这个是web.xml文件中的一部分吧,好像和我的问题没太大关系。
也可能我没明白你的意思,希望能进一步讨论这个问题。我只要在xml里写的是dtd的绝对路径肯定不会出错。
我想应该是解析器在处理路径时的问题,不知道为什么InputSource的setSystemId()方法不起作用。
DocumentBuilderFactory factory=DocumentBuilderFactory.newInstance();
DocumentBuilder builder=factory.newDocumentBuilder();
Document doc=builder.parse(new File(is));
这样就不错了,因为你转变为FileInputStream,导致DocumentBuilder 根本不知道你的File在哪个目录中,所以无法找到DTD
DocumentBuilderFactory factory=DocumentBuilderFactory.newInstance();
DocumentBuilder builder=factory.newDocumentBuilder();
Document doc=builder.parse(new File(is));
你的代码里最后一行的参数应该是str不是is吧
java解析xml文件时,找不到相对路径的dtd文件?与jdk版本有关系? 小女非常感激
应该把要解析的xml转换为stream
InputStream in=new FileInputStream(filePath);
dtd的引用 我一般都写绝对路径 还没有发现错误
把DTD和XML放在同于个目录。如果你需要把XML和DTD放在不同的目录, 则需要需要告诉XML解析器到哪里去找DTD. Apache提供一个开源的库来处理这方面的事情,请参考:http://xml.apache.org/commons/components/resolver/