我知道那里有一些SAXParser问题,但我找不到一个描述我问题的问题:
我有一个包含XML数据的String,我将它传递给ByteArrayInputStream:
public boolean parse(String message) {
ByteArrayInputStream bis = new ByteArrayInputStream(message.getBytes());
我在其上调用解析方法
saxparser.parse(bis, handler); //this row throws a FileNotFoundException
尽管没有提及任何文件,但解析会抛出FileNotFoundException
。
奇怪的是,它试图在我的工作区中找到一个不存在的文件名,后来我发现文件名是双引号括起来的字符串的一部分(见下文,我们称之为“theFile.extension”文件)
编辑:我想也许我的XML由于某种原因被错误地写了:
<?xml version="1.0"?>
<!DOCTYPE presence PUBLIC "Some-valid-stuff" "theFile.extension">
在这种情况下,我应该在哪里寻找解决方案?
由于
答案 0 :(得分:3)
SAX解析器正在尝试使用指定的DTD文件验证xml,这就是它尝试加载该文件的原因。
您可以按如下方式禁用验证。
saxParserFactory.setValidating(false)
saxParserFactory.setFeature("http://apache.org/xml/features/nonvalidating/load-external-dtd", false)