java - SAX解析器: Specify DTD location in applet

标签 java xml sax dtd japplet

我有一个小程序,可以在小程序查看器中正常工作,但一旦延迟到服务器,它就无法解析 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/

相关文章:

python - 在python中将Notation3文件序列化为RDFXML格式时出错

java - 通过 Java SAXParser 解析经过 dtd 验证的 XML 文档时如何解析 "questionmarks"?

java - SAXParseException : Element type "CountryNamecode" must be followed by either attribute specifications, ">"或 "/>"

java - 使用 SAX 和 Java 比较两个属性值

java - eclipse4 RCP 片段 "Unable to load class from bundle"

java - 对于这种情况,如何在 hibernate 中定义唯一约束?

java - 将 Azure AD 身份验证与 AWS 中托管的现有基于 Java 的 Web 应用程序集成的可能选项?

java - 按字母顺序对数组进行排序

ios - 用于解析的最快iOS数据格式

java - 图片旁边的文字?