實際開發中常遇到結構不規範的 XML:同一層級節點結構不一致(有的只有文本,有的包含子節點)。本文以實際 XML 片段為例,講解 DOM4J 針對性解析策略。
<?xml version='1.0' encoding='UTF-8'?>
<DBSET RESULT="1">
<R>
<C N="RLT_FLAG">0</C>
<C N="TASK_TAIL">
<DBSET RESULT="2"> <!-- 子節點:嵌套 DBSET -->
<R>
<C N="TASK_NO">131103507930</C>
...
</R>
</DBSET>
</C>
</R>
</DBSET>
<C> 節點存在兩種結構:
RLT_FLAG)<DBSET>(如 TASK_TAIL)通用遍歷代碼無法直接處理,需按節點屬性 N 區分邏輯。
Element root = document.getRootElement();
parseDBSET(root);
void parseDBSET(Element dbset) {
for (Element r : dbset.elements("R")) {
for (Element c : r.elements("C")) {
String name = c.attributeValue("N");
if (c.elements().isEmpty()) {
// 類型 1:葉子節點,直接取文本
String value = c.getTextTrim();
handleLeaf(name, value);
} else {
// 類型 2:容器節點,遞歸解析嵌套 DBSET
Element nested = c.element("DBSET");
if (nested != null) parseDBSET(nested);
}
}
}
}
elements().isEmpty() 判斷是否有子元素N 屬性值分派不同處理邏輯面對不規範 XML,「分類處理 + 遞歸下潛」是通用套路。