我有一个小程序,可以在小程序查看器中正常工作,但一旦延迟到服务器,它就无法解析 XML 文件
原因很简单:SAX 解析器试图打开硬盘上的 dtd,而不是 JAR 中的 dtd。
我被告知要这样做:
URLs to resources can easily be formed using the URL(baseURL, pathString) constructor where the base URL is obtained from Applet.getDocumentBase() or 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);
}
有什么想法吗?
杰森
最佳答案
如果不需要验证,您可以在 SAXParserFactory.setValidating() 中将其关闭。因此解析器不会尝试读取 DTD。
但是,如果您确实需要验证,则可以通过设置您自己的 EntityResolver 来重定向任何 DTD/XSD 请求。在 sax 解析器上。
关于java - SAX解析器: Specify DTD location in applet,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6452909/