使用dom4j遍历简单xml字符串

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/u011199410/article/details/62527905

案例需求

遍历以下xml串,去掉节点< ITEM>中属性val为空的节点

<?xml version="1.0"?>
<MESSAGE>
    <DATASET name="1XXXXXXXXX">
        <DATA>
            <ITEM key="RRE" val="1290039"/>
            <ITEM key="FFC" val="ACCOUNT"/>
            <ITEM key="MSGID"/>
            <ITEM key="MSGTYPE" val="3"/>
        </DATA>
    </DATASET>
    <DATASET name="2XXXXXXXXXX">
        <DATA>
            <ITEM key="USER_ACCOUNT" val="12344567"/>
            <ITEM key="USER_SDRTGID"/>
        </DATA>
    </DATASET>
</MESSAGE>


逻辑处理:
1、使用dom4j构建 Document 对象,找到根节点root

    public static String  filterValXmlStr(String xmlStr) throws Exception{
        Document document = DocumentHelper.parseText(xmlStr);
        Element root = document.getRootElement();
        readNote(root);
        return document.asXML();
    }

2、递归遍历节,找到底层item节点,判断属性val是否有值,如果存在val为空,则在整个document 对象中移除该子节点

  public static void readNote(Element node) {
        for (Iterator it = node.elementIterator(); it.hasNext(); ) {
            Element item = (Element) it.next();
            Iterator it2 = item.elementIterator();
            if (it2.hasNext()) {
                System.out.println("...存在子节点,继续遍历");
                readNote(item);
            } else {
                System.out.println("已经到达最底层节点..开始解析底层节点属性是否有val值");
                if (item.attribute("val") == null) {
                    System.out.println("<=val属性值不存在,移除节点");
                    node.remove(item);
                } else {
                    System.out.println("<=val属性值存在,跳过");
                }
            }
        }
    }

3、将document对象转换成xml字符串

document.asXML();

猜你喜欢

转载自blog.csdn.net/u011199410/article/details/62527905