java的xml解析
xml文件格式:
<?xml version='1.0' encoding='utf-8'?>
<Envelope>
<Header>
<Topic_Info>
<Msg_ID>414d5120514d5f47575f44494220202059e023c123b59d5c</Msg_ID>
<Node_ID>BK_DIB_12.EG_01</Node_ID>
<Topic_ID>/OMIS/fligthPlan</Topic_ID>
<Parent_Topic_ID>/OMIS/fligthPlan</Parent_Topic_ID>
<Topic_Classfication />
<Requester_SYS_ID>OMIS</Requester_SYS_ID>
<Requester_SYS_PWD></Requester_SYS_PWD>
<Topic_Status>SUCCESS</Topic_Status>
<PubSub_Command>Publish</PubSub_Command>
<Message_Status>3</Message_Status>
<Topic_AA_Status>PASSED</Topic_AA_Status>
<Topic_AA_Time>2017-10-13 23:00:35.359</Topic_AA_Time>
<Req_In_Time>2017-10-13 23:00:35.252</Req_In_Time>
<Resp_Out_Time>2017-10-13 23:00:35.529</Resp_Out_Time>
<QM_ID>QM_GW_DIB</QM_ID>
<Sub_Q />
<Reply_To_Q>OMIS.PUBSUB.RESPONSE.Q</Reply_To_Q>
<Reply_Flag>Yes</Reply_Flag>
<DB_LogLevel>3</DB_LogLevel>
<File_LogLevel>3</File_LogLevel>
<ExecuteInfo>BrokerName:BK_DIB_12.EG_01(9437444)#ServiceName:ESB_PUBLISH#CurStatus:GetPublishStatus</ExecuteInfo>
</Topic_Info>
<Error_Info>
<Fail_Time />
<Fail_Node_ID />
<Error_Code />
<Error_Level />
<Error_Desc />
<Error_Detail />
</Error_Info>
</Header>
<Body>
<TopicData>
<ROOT>
<Flight>
<AC_ID />
<AC_STOP />
<AC_STOP_ARR />
<AC_TYPE>75F</AC_TYPE>
<ARR_APT>NKG</ARR_APT>
<VB>0</VB>
<CO_SEQ>3</CO_SEQ>
<DEP_APT>CTU</DEP_APT>
<FLT_DATE>2017-10-16</FLT_DATE>
<FLT_ID>1085</FLT_ID>
<FLT_TASK>W/Z</FLT_TASK>
<FLT_TYPE>D</FLT_TYPE>
<IATA_C>CA</IATA_C>
<STA>2017-10-16 02:35:00</STA>
<STD>2017-10-16 00:15:00</STD>
<VA>0</VA>
</Flight>
<Flight>
<AC_ID />
<AC_STOP />
<AC_STOP_ARR />
<AC_TYPE>75F</AC_TYPE>
<ARR_APT>NKG</ARR_APT>
<VB>0</VB>
<CO_SEQ>3</CO_SEQ>
<DEP_APT>PEK</DEP_APT>
<FLT_DATE>2017-10-16</FLT_DATE>
<FLT_ID>1083</FLT_ID>
<FLT_TASK>W/Z</FLT_TASK>
<FLT_TYPE>D</FLT_TYPE>
<IATA_C>CA</IATA_C>
<STA>2017-10-16 02:35:00</STA>
<STD>2017-10-16 00:45:00</STD>
<VA>0</VA>
</Flight>
</ROOT>
</TopicData>
</Body>
</Envelope>
xml解析:
调用的xmlString2Map方法:
调用的xml2mapWithAttr方法:
利用DOM4J解析:
/**
* xml转map 带属性
* @param element
* @return
*/
private static Map xml2mapWithAttr(Element element) {
Map<String, Object> map = new LinkedHashMap<String, Object>();
List<Element> list = element.elements();
List<Attribute> listAttr0 = element.attributes(); // 当前节点的所有属性的list
for (Attribute attr : listAttr0) {
map.put("@" + attr.getName(), attr.getValue());
}
if (list.size() > 0) {
for (int i = 0; i < list.size(); i++) {
Element iter = list.get(i);
List mapList = new ArrayList();
if (iter.elements().size() > 0) {
Map m = xml2mapWithAttr(iter);
if (map.get(iter.getName()) != null) {
Object obj = map.get(iter.getName());
if (!(obj instanceof List)) {
mapList = new ArrayList();
mapList.add(obj);
mapList.add(m);
}
if (obj instanceof List) {
mapList = (List) obj;
mapList.add(m);
}
map.put(iter.getName(), mapList);
} else
map.put(iter.getName(), m);
} else {
List<Attribute> listAttr = iter.attributes(); // 当前节点的所有属性的list
Map<String, Object> attrMap = null;
boolean hasAttributes = false;
if (listAttr.size() > 0) {
hasAttributes = true;
attrMap = new LinkedHashMap<String, Object>();
for (Attribute attr : listAttr) {
attrMap.put("@" + attr.getName(), attr.getValue());
}
}
if (map.get(iter.getName()) != null) {
Object obj = map.get(iter.getName());
if (!(obj instanceof List)) {
mapList = new ArrayList();
mapList.add(obj);
// mapList.add(iter.getText());
if (hasAttributes) {
attrMap.put("#text", iter.getText());
mapList.add(attrMap);
} else {
mapList.add(iter.getText());
}
}
if (obj instanceof List) {
mapList = (List) obj;
// mapList.add(iter.getText());
if (hasAttributes) {
attrMap.put("#text", iter.getText());
mapList.add(attrMap);
} else {
mapList.add(iter.getText());
}
}
map.put(iter.getName(), mapList);
} else {
// map.put(iter.getName(), iter.getText());
if (hasAttributes) {
attrMap.put("#text", iter.getText());
map.put(iter.getName(), attrMap);
} else {
map.put(iter.getName(), iter.getText());
}
}
}
}
} else {
// 根节点的
if (listAttr0.size() > 0) {
map.put("#text", element.getText());
} else {
map.put(element.getName(), element.getText());
}
}
return map;
}