SAX Parser:在applet中指定DTD位置

时间:2011-06-23 10:56:10

标签: java xml sax dtd japplet

我有一个小程序在applet查看器中工作正常,但一旦被解除,它无法解析XML文件

原因很简单:SAX解析器试图在硬盘上而不是在JAR中打开dtd。

有人告诉我这样做:

  

可以轻松形成资源的URL   使用URL(baseURL,pathString)   基本URL所在的构造函数   从Applet.getDocumentBase()获得   或Applet.getCodeBase()。

但我不知道如何在我的案例中应用这个:

这是一个XML示例:

<?xml version="1.0"?>
<!DOCTYPE note SYSTEM "leveldtd.dtd">   
<level>
...
</level>

这是解析器的初始化

public static void parseThis(InputSource is) throws Exception{
        SAXParserFactory spf = SAXParserFactory.newInstance();
        SAXParser sp = spf.newSAXParser();
        XMLHandlerLevel myExampleHandler = new XMLHandlerLevel();
        XMLReader xr = sp.getXMLReader();
        xr.setContentHandler(myExampleHandler);
        /* Begin parsing */ 
        xr.parse(is);
    }

任何想法?

杰森

1 个答案:

答案 0 :(得分:0)

如果不需要验证,您可以在SAXParserFactory.setValidating()中进行验证,以便解析器不会尝试读取DTD。

如果您确实需要验证,可以通过在sax解析器上设置自己的EntityResolver来重定向任何DTD / XSD请求。