【发布时间】:2011-09-21 03:04:04
【问题描述】:
我有一个在小程序查看器中运行良好的小程序,但一旦播放到服务器,它就无法解析 XML 文件
原因很简单:SAX 解析器试图打开硬盘上的 dtd,而不是 JAR。
有人告诉我这样做:
可以很容易地形成资源的 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);
}
有什么想法吗?
杰森
【问题讨论】:
-
这可能只是一个错字,与您的问题无关,但您的 XML 示例有一个“注释”文档类型 (
<!DOCTYPE note),根元素是level。 -
这有什么问题? (我的 xml 是完全定制的,用于存储我的游戏关卡,不遵守特定规范,dtd 只是为了确保数据格式正确)
-
文档类型中的名称必须与根元素匹配,否则无效。我不确定如何根据 DTD 验证 XML 并且不会出错。来自“w3.org/TR/xml/#sec-prolog-dtd”:
Validity constraint: Root Element Type-The Name in the document type declaration MUST match the element type of the root element.