dom4j 递归读取XML文件

有几年工作经验的,无需再看此文。


在解析XML文件的时候,可选择的方案有大约四种,具体就不说了,但是其中最好的应该是使用dom4j 来操作XML最为方便。


最近遇到个项目,以XML传输信息,文件的内容不定,格式不定,数据的种类和大小也不定,只是告诉你会有N多的字段出现在xml文件中,

可能是包含在很多结构体中,也可能就是一个element ,要求对这样的xml文件进行解析,并取得到相关的值。


咋一看,我靠,啥破玩意,格式,内容,标签什么都没有,只告诉你是用XML传输,还要取得它的值,确实有点蒙。

不过,细细想,也不是很难,无非就是要取得每个标签下的标签名和标签所的的值吗,想清楚了这个,其实就是编码的问题了。。。


不多说了,直接上code.

 
    static StringBuffer buffer = null;
    public static String getContentByXML(String xmlContent) {
        buffer = new StringBuffer("");
        try {
            Document document = DocumentHelper.parseText(xmlContent);
            Element root = document.getRootElement();
            List<Element> elemList = root.elements();
           if(elemList!=null && elemList.size()>0){

                for (Element element : elemList) {
                getElementVal(element);
              }

             }else{

                getElementVal(root);

            }
            return buffer.toString();
        } catch (Exception e) {
            return null;
        }
    }
    
 
    public static void getElementVal(Element element) {
        try {
            Iterator<Element> iterator = element.elementIterator();
            if (iterator.hasNext()) {
                while(iterator.hasNext()){
                    getElementVal(iterator.next());
                }
            }else {
                if (element.isTextOnly()) {
                    String name = element.getName();
                    String value = element.getTextTrim();
                    if (StringUtil.isNotBlank(value)) {
                        String result =name +":"+ value+"  \n";
                        buffer.append(result);
                    }
                }
            }
        } catch (Exception e) {
            logger.info("读取xml文件出错了.请检查xml文件是否完好!");
        }
    }


总结下:

这个得需求是要取得xml文件中的内容,可是并没有告诉你有哪些标签,也不告诉你标签的位置,样式,结构,

初看是比较的痛苦,不过,细想一下,其实也好好,毕竟dom4j 为我们提供了很多的函数去调用。

在上例中,采用了递归的算法来读取每个element ,并判断是否有子标签,依次读取值并做返回就OK !





评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值