首页 / XML / java-解析XML时忽略DTD
java-解析XML时忽略DTD
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了java-解析XML时忽略DTD,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1694字,纯文字阅读大概需要3分钟。
内容图文
![java-解析XML时忽略DTD](/upload/InfoBanner/zyjiaocheng/694/34e31b33ea91417896f91477d98b0b36.jpg)
使用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();
将DTD行从源XML文件中删除后,我可以成功解析它,但这不是最终生产系统中的选项.
解决方法:
首选的解决方案是实现一个EntityResolver来拦截对DTD的请求,并将其重定向到嵌入式副本.如果你
>无法访问DTD,并且
>绝对确定您将不需要它(除了验证,它还可以声明文档中使用的字符实体),并且
>您正在使用Xerces XML Parser实现
您可以通过设置相应的SAX功能来禁用DTD的获取.在XOM中,应该通过将XMLReader传递给Builder构造函数,如下所示:
import org.xml.sax.XMLReader;
import org.xml.sax.helpers.XMLReaderFactory;
...
XMLReader xmlreader = XMLReaderFactory.createXMLReader();
xmlreader.setFeature("http://apache.org/xml/features/nonvalidating/load-external-dtd", false);
Builder builder = new Builder(xmlreader);
内容总结
以上是互联网集市为您收集整理的java-解析XML时忽略DTD全部内容,希望文章能够帮你解决java-解析XML时忽略DTD所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。