我有一个小程序在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);
}
任何想法?
杰森
答案 0 :(得分:0)
如果不需要验证,您可以在SAXParserFactory.setValidating()中进行验证,以便解析器不会尝试读取DTD。
如果您确实需要验证,可以通过在sax解析器上设置自己的EntityResolver来重定向任何DTD / XSD请求。