Java SAX Parser引发UnknownHostException [英] Java SAX Parser raises UnknownHostException

查看:239
本文介绍了Java SAX Parser引发UnknownHostException的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我要解析的XML文件以:

The XML file I want to parse starts with :

<!DOCTYPE plist PUBLIC "-//...//DTD PLIST 1.0//EN" "http://www.....dtd">

所以当我启动SAX praser时,它会尝试在线访问这个DTD,我得到一个java .net.UnknownHostException。

So when I start the SAX praser, it tries to access this DTD online, and I get a java.net.UnknownHostException.


  1. 我无法修改XML文件,然后再将其提供给SAX解析器

  2. 我必须在没有互联网连接的情况下运行

如何更改SAX Parser行为,以便它不会尝试加载DTD?
谢谢。

How can I change the SAX Parser behaviour so that it does not try to load the DTD ? Thanks.

javax.xml.parsers.SAXParserFactory factory = javax.xml.parsers.SAXParserFactory.newInstance();
factory.setValidating(false);

javax.xml.parsers.SAXParser parser = factory.newSAXParser();
parser.parse(xmlFile, handler);


推荐答案

好的,结果 parse()方法使用传递给parse方法的处理程序覆盖任何以前设置的实体解析器。以下代码应该可以工作:

Ok, turns out the parse() method overrides any previously set entity resolvers with the handler passed in to the parse method. The following code should work:

javax.xml.parsers.SAXParserFactory factory = javax.xml.parsers.SAXParserFactory.newInstance();
factory.setValidating(false);
javax.xml.parsers.SAXParser parser = factory.newSAXParser();
parser.parse(new java.io.File("x.xml"), new org.xml.sax.helpers.DefaultHandler(){
        public org.xml.sax.InputSource resolveEntity(String publicId, String systemId)
                throws org.xml.sax.SAXException, java.io.IOException {
            System.out.println("Ignoring: " + publicId + ", " + systemId);
            return new org.xml.sax.InputSource(new java.io.StringReader(""));
        }
    }); 

这篇关于Java SAX Parser引发UnknownHostException的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆