1

我有一个在小程序查看器中运行良好的小程序,但一旦播放到服务器,它就无法解析 XML 文件

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

有人告诉我这样做:

使用 URL(baseURL, pathString) 构造函数可以很容易地形成资源的 URL,其中基本 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);
    }

有任何想法吗 ?

杰森

4

1 回答 1

0

如果不需要验证,您可以在SAXParserFactory.setValidating()中将其关闭,这样解析器就不会尝试读取 DTD。

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

于 2011-06-23T13:38:07.800 回答