案例需求:
遍历以下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();