ffhelly
2012-07-31 09:23
浏览 185
已采纳

关于dom4j 解析hbm.xml文件。。

用dom4j 解析 普通的XML速度倒是挺快的。。
但是解析hbm.xml的时候 时间就会很慢。。

我只是取其中的id的部分节点值 肿么可以更高效的读取呢??

现在读取的话 大概4个HBM.XML 需要2分多钟才能出来。。
而且2个HBM都不超过10个字段 没有set。
2个方法:
[code="java"]
//读取XML文件返回doc实体
public Document getDocumentByPath(String path){
SAXReader saxReader = new SAXReader();
Document document;
String end="";
try {
document = saxReader.read(path);
return document;
} catch (DocumentException e) {
e.printStackTrace();
return null;
}
}
//读取需要的节点值 并返回
public String getXmlValue(Document doc,String rootName){
SAXReader saxReader = new SAXReader();
Document document=doc;
String end="";
try {
//获取并返回所有对应节点的属性值
List list = document.selectNodes(rootName);
Iterator iter = list.iterator();
while (iter.hasNext()) {
Attribute attribute = (Attribute) iter.next();
end=attribute.getValue();
break;
}
return end;
} catch (Exception e) {
e.printStackTrace();
return "";
}
}
[/code]

求指点。。

  • 点赞
  • 写回答
  • 关注问题
  • 收藏
  • 邀请回答

4条回答 默认 最新

  • libo_591 2012-07-31 14:47
    已采纳

    跳过DTD检查,部分代码如下:
    [code="java"]
    SAXBuilder sax = new SAXBuilder();
    sax.setValidation(false);
    sax.setEntityResolver(new EntityResolver(){//设置DTD验证
    public InputSource resolveEntity(String publicId, String systemId)
    throws FileNotFoundException {
    String localTLDPath = "";
    InputSource is = null;
    if(!"".equals(localTLDPath)){//设置了本地DTD验证
    is = new InputSource(new FileInputStream(localTLDPath));
    is.setPublicId(publicId);
    is.setSystemId(systemId);
    }else{//不验证
    is = new InputSource(new StringReader(""));
    }
    return is;
    }
    });
    result = sax.build(in);
    [/code]

    点赞 评论
  • iteye_5246 2012-07-31 09:39

    jdom试试

    点赞 评论
  • jiaohz 2012-07-31 11:13

    这个不建议直接解析,hbm.xml中含有http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd的定义文件,需要从官网下载,然后才进行解析的,如果上不了网甚至都解析不了。

    建议直接读文件内容 或读出文件后将dtd定义删除后再通过dom4j解析。

    点赞 评论
  • Eclipsekll5h 2012-07-31 11:33

    这用的是sax解析,不是dom解析,sax解析不把xml全部加载,而是逐行扫描的;dom解析xml是把文档在内存中全部构建后直接访问。
    对于频繁读取的xml建议使用dom解析把文档全部加载

    点赞 评论

相关推荐 更多相似问题