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;
}

posted @ 2018-07-07 00:53  小小小小青石  阅读(199)  评论(0)    收藏  举报