使用 XOM xml 库解析文件时如何忽略 DTD 声明。我的文件有以下行:
<?xml version="1.0"?>
<!DOCTYPE BlastOutput PUBLIC "-//NCBI//NCBI BlastOutput/EN" "NCBI_BlastOutput.dtd">
//rest of stuff here
当我尝试 build() 我的文档时,我得到 DTD 文件的 filenotfound 异常。我知道我没有这个文件,我也不关心它,那么在使用 XOM 时如何删除它呢?
这是一个代码片段:
public BlastXMLParser(String filePath) {
Builder b = new Builder(false);
//not a good idea to have exception-throwing code in constructor
try {
_document = b.build(filePath);
} catch (ParsingException ex) {
Logger.getLogger(BlastXMLParser.class.getName()).log(Level.SEVERE,"err", ex);
} catch (IOException ex) {
//
}
private Elements getBlastReads() {
Element root = _document.getRootElement();
Elements rootChildren = root.getChildElements();
for (int i = 0; i < rootChildren.size(); i++) {
Element child = rootChildren.get(i);
if (child.getLocalName().equals("BlastOutput_iterations")) {
return child.getChildElements();
}
}
return null;
}
}
我在这一行得到一个 NullPointerException:
Element root = _document.getRootElement();
从源 XML 文件中删除 DTD 行后,我可以成功解析它,但这不是最终生产系统中的选项。