我遇到了一个XML文件,尽管看起来很好,但未通过格式检查(也许是我错了)。
我已将其简化为一个微不足道的例子:
<?xml version="1.0" encoding="Cp1252"?>
<jnlp/>
执行此检查的方法如下:
public static boolean isWellFormedXml(InputStream inputStream) {
try {
XMLInputFactory inputFactory = XMLInputFactory.newInstance();
inputFactory.setProperty(XMLInputFactory.IS_COALESCING, false);
inputFactory.setProperty(XMLInputFactory.SUPPORT_DTD, false);
XMLStreamReader reader = inputFactory.createXMLStreamReader(stream);
try {
// Scan through all the reader tokens to ensure everything is well formed
while (reader.hasNext()) {
reader.next();
}
} finally {
reader.close();
}
} catch (XMLStreamException e) {
// Ignore the exception
return false;
}
return true;
}
我看到的错误是:
javax.xml.stream.XMLStreamException: ParseError at [row,col]:[1,40]
错误信息: 编码名称"Cp1252"无效。
唯一的问题是 - 我可以在捕获异常处设置断点并确认此编码名称确实被解析。那么问题出在哪里呢?XML是否也限制了您在文档开头可以使用的编码类型?