一区二区三区在线-一区二区三区亚洲视频-一区二区三区亚洲-一区二区三区午夜-一区二区三区四区在线视频-一区二区三区四区在线免费观看

服務(wù)器之家:專注于服務(wù)器技術(shù)及軟件下載分享
分類(lèi)導(dǎo)航

PHP教程|ASP.NET教程|Java教程|ASP教程|編程技術(shù)|正則表達(dá)式|C/C++|IOS|C#|Swift|Android|VB|R語(yǔ)言|JavaScript|易語(yǔ)言|vb.net|

服務(wù)器之家 - 編程語(yǔ)言 - Java教程 - Dom4j解析xml復(fù)雜多節(jié)點(diǎn)報(bào)文方式

Dom4j解析xml復(fù)雜多節(jié)點(diǎn)報(bào)文方式

2022-01-18 17:01程序大視界 Java教程

這篇文章主要介紹了Dom4j解析xml復(fù)雜多節(jié)點(diǎn)報(bào)文方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教

Dom4j解析xml復(fù)雜多節(jié)點(diǎn)報(bào)文

XML是一種通用的數(shù)據(jù)交換格式,它的平臺(tái)無(wú)關(guān)性、語(yǔ)言無(wú)關(guān)性、系統(tǒng)無(wú)關(guān)性、給數(shù)據(jù)集成與交互帶來(lái)了極大的方便。XML在不同的語(yǔ)言環(huán)境中解析方式都是一樣的,只不過(guò)實(shí)現(xiàn)的語(yǔ)法不同而已。

XML的解析方式分為四種

1、DOM解析

2、SAX解析

3、JDOM解析

4、DOM4J解析

其中前兩種屬于基礎(chǔ)方法,是官方提供的平臺(tái)無(wú)關(guān)的解析方式;后兩種屬于擴(kuò)展方法,它們是在基礎(chǔ)的方法上擴(kuò)展出來(lái)的,只適用于java平臺(tái)。

本文介紹的是DOM4J方式解析

依賴jar包:

?
1
2
3
4
5
<dependency>
 <groupId>dom4j</groupId>
 <artifactId>dom4j</artifactId>
 <version>1.6.1</version>
</dependency>

xml報(bào)文如下:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<Root>
    <SttlCntNb>2</SttlCntNb>
    <DebitCntAmt>CNY0.00</DebitCntAmt>
    <CreditCntAmt>CNY4700.00</CreditCntAmt>
    <SttlList>
        <SttlInf>
            <SttlReptFlg>2018052500170139</SttlReptFlg>
            <SttlDCFlg>2</SttlDCFlg>
            <SttlAmt>CNY100.00</SttlAmt>
            <BatchList>
                <BatchInf>
                    <BatchId>B201805230015</BatchId>
                    <BatchDCFlg>2</BatchDCFlg>
                    <BatchNetAmt>CNY100.00</BatchNetAmt>
                    <SubItemList>
                        <SubItemInf>0113|C3228644000018|04|CNY0.00|0|CNY5.00|1|</SubItemInf>
                        <SubItemInf>0120|C3228640000020|05|CNY50.00|1|CNY0.00|0|</SubItemInf>
                        <SubItemInf>0114|C3228640000029|07|CNY0.00|0|CNY5.00|1|</SubItemInf>
                        <SubItemInf>0115|C3228640000019|06|CNY0.00|0|CNY5.00|1|</SubItemInf>
                        <SubItemInf>0111|C3228640000016|03|CNY0.00|0|CNY10.00|1|</SubItemInf>
                        <SubItemInf>0110|C3228644000016|01|CNY0.00|0|CNY110.00|1|</SubItemInf>
                        <SubItemInf>0112|C3228644000017|99|CNY0.00|0|CNY5.00|1|</SubItemInf>
                        <SubItemInf>0110|C3228644000016|02|CNY0.00|0|CNY10.00|1|</SubItemInf>
                    </SubItemList>
                </BatchInf>
            </BatchList>
        </SttlInf>
        <SttlInf>
            <SttlReptFlg>2018052500170138</SttlReptFlg>
            <SttlDCFlg>2</SttlDCFlg>
            <SttlAmt>CNY4600.00</SttlAmt>
            <BatchList>
                <BatchInf>
                    <BatchId>B201805240001</BatchId>
                    <BatchDCFlg>2</BatchDCFlg>
                    <BatchNetAmt>CNY400.00</BatchNetAmt>
                    <SubItemList>
                        <SubItemInf>0126|C1010511003703|00|CNY0.00|4|CNY0.00|0|</SubItemInf>
                        <SubItemInf>0125|C1010211000012|01|CNY0.00|8|CNY0.00|0|</SubItemInf>
                        <SubItemInf>0126|C1010211000012|01|CNY0.00|8|CNY0.00|0|</SubItemInf>
                        <SubItemInf>0124|C1010211000012|01|CNY0.00|8|CNY0.00|0|</SubItemInf>
                        <SubItemInf>0123|C1010211000012|01|CNY0.00|4|CNY0.00|0|</SubItemInf>
                        <SubItemInf>0110|C1010211000012|01|CNY0.00|0|CNY400.00|2|</SubItemInf>
                    </SubItemList>
                </BatchInf>
                <BatchInf>
                    <BatchId>B201805240002</BatchId>
                    <BatchDCFlg>2</BatchDCFlg>
                    <BatchNetAmt>CNY400.00</BatchNetAmt>
                    <SubItemList>
                        <SubItemInf>0125|C1010211000012|00|CNY400.00|4|CNY0.00|0|</SubItemInf>
                        <SubItemInf>0110|C1010211000012|00|CNY0.00|0|CNY800.00|2|</SubItemInf>
                    </SubItemList>
                </BatchInf>
                <BatchInf>
                    <BatchId>B201805240003</BatchId>
                    <BatchDCFlg>1</BatchDCFlg>
                    <BatchNetAmt>CNY0.00</BatchNetAmt>
                    <SubItemList>
                        <SubItemInf>0120|C1010211000012|00|CNY0.00|4|CNY0.00|0|</SubItemInf>
                    </SubItemList>
                </BatchInf>
                <BatchInf>
                    <BatchId>B201805240004</BatchId>
                    <BatchDCFlg>2</BatchDCFlg>
                    <BatchNetAmt>CNY1200.00</BatchNetAmt>
                    <SubItemList>
                        <SubItemInf>0112|C1010211000012|01|CNY0.00|0|CNY1200.00|2|</SubItemInf>
                    </SubItemList>
                </BatchInf>
                <BatchInf>
                    <BatchId>B201805240005</BatchId>
                    <BatchDCFlg>2</BatchDCFlg>
                    <BatchNetAmt>CNY400.00</BatchNetAmt>
                    <SubItemList>
                        <SubItemInf>0113|C1010211000012|00|CNY0.00|0|CNY400.00|4|</SubItemInf>
                    </SubItemList>
                </BatchInf>
                <BatchInf>
                    <BatchId>B201805240006</BatchId>
                    <BatchDCFlg>2</BatchDCFlg>
                    <BatchNetAmt>CNY400.00</BatchNetAmt>
                    <SubItemList>
                        <SubItemInf>0114|C1010211000012|00|CNY0.00|0|CNY400.00|4|</SubItemInf>
                    </SubItemList>
                </BatchInf>
                <BatchInf>
                    <BatchId>B201805240007</BatchId>
                    <BatchDCFlg>2</BatchDCFlg>
                    <BatchNetAmt>CNY200.00</BatchNetAmt>
                    <SubItemList>
                        <SubItemInf>0115|C1010211000012|01|CNY0.00|0|CNY200.00|2|</SubItemInf>
                    </SubItemList>
                </BatchInf>
                <BatchInf>
                    <BatchId>B201805240008</BatchId>
                    <BatchDCFlg>2</BatchDCFlg>
                    <BatchNetAmt>CNY600.00</BatchNetAmt>
                    <SubItemList>
                        <SubItemInf>0115|C1010211000012|01|CNY0.00|0|CNY600.00|2|</SubItemInf>
                    </SubItemList>
                </BatchInf>
                <BatchInf>
                    <BatchId>B201805240009</BatchId>
                    <BatchDCFlg>2</BatchDCFlg>
                    <BatchNetAmt>CNY400.00</BatchNetAmt>
                    <SubItemList>
                        <SubItemInf>0110|C1010511003703|00|CNY0.00|0|CNY400.00|2|</SubItemInf>
                    </SubItemList>
                </BatchInf>
                <BatchInf>
                    <BatchId>B201805240010</BatchId>
                    <BatchDCFlg>2</BatchDCFlg>
                    <BatchNetAmt>CNY1200.00</BatchNetAmt>
                    <SubItemList>
                        <SubItemInf>0111|C1010211000012|01|CNY0.00|0|CNY1200.00|4|</SubItemInf>
                    </SubItemList>
                </BatchInf>
                <BatchInf>
                    <BatchId>B201805240012</BatchId>
                    <BatchDCFlg>1</BatchDCFlg>
                    <BatchNetAmt>CNY1200.00</BatchNetAmt>
                    <SubItemList>
                        <SubItemInf>0116|C1010511003703|00|CNY1200.00|4|CNY0.00|0|</SubItemInf>
                    </SubItemList>
                </BatchInf>
            </BatchList>
        </SttlInf>
    </SttlList>
</Root>

主要核心代碼如下

  • String saveFile 為本地保存xml報(bào)文的路徑。
  • AccountInfoEntityResp 為解析xml后封裝的obj實(shí)體對(duì)象。
?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
/**
     * 解析xml文件并
     */
    public String Dom4jGetXML(String saveFile){
        //返回的Entity對(duì)象
        String xmlContents = new String();
        // 創(chuàng)建SAXReader的對(duì)象reader
        SAXReader reader = new SAXReader();
        try {
//            Resource resource = new ClassPathResource("accountInfo/"+accountDate+".xml");
            Resource resource = new ClassPathResource(saveFile);
            File file = null;
            try{
                file = resource.getFile();
            }catch (Exception e){
                //拋出異常
            }
            // 通過(guò)reader對(duì)象的read方法加載books.xml文件,獲取docuemnt對(duì)象。
            Document document = reader.read(file);
            // 通過(guò)document對(duì)象獲取根節(jié)點(diǎn)bookstore
            Element rootElement = document.getRootElement();
            //document轉(zhuǎn)換為String字符串
            xmlContents  = document.asXML();
            //解析xml文件并轉(zhuǎn)換為obj
        } catch (DocumentException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        return xmlContents;
    }
?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
/**
     * 解析對(duì)賬文件xml,轉(zhuǎn)換為obj對(duì)象返回前段
     * @Descriptions: 循環(huán)遍歷所有子節(jié)點(diǎn),保存每個(gè)節(jié)點(diǎn)的值
     * @Return: AccountInfoEntity
     */
    public AccountInfoEntityResp getNodes(Element node){
        AccountInfoEntityResp accountInfoEntityResp = new AccountInfoEntityResp();
        List<SttlInf> SttlList = new ArrayList<SttlInf>();
        //獲得指定節(jié)點(diǎn)下面的子節(jié)點(diǎn),首先要知道自己要操作的節(jié)點(diǎn)。
        Element SttlCntNbElem = node.element("SttlCntNb");
        //獲取SttlCntNb
        String SttlCntNb = SttlCntNbElem.getTextTrim();
        //獲取DebitCntAmt
        Element DebitCntAmtElem = node.element("DebitCntAmt");
        String DebitCntAmt = DebitCntAmtElem.getTextTrim();
        //獲取CreditCntAmt
        Element CreditCntAmtElem = node.element("CreditCntAmt");
        String CreditCntAmt = CreditCntAmtElem.getTextTrim();
        accountInfoEntityResp.setSttlCntNb(Integer.valueOf(SttlCntNb));
        BigDecimal CreditCntAmtVal = null;
        if(CreditCntAmt != null && !CreditCntAmt.isEmpty()){
            CreditCntAmtVal = new BigDecimal(CreditCntAmt.replace("CNY", ""));
        }
        accountInfoEntityResp.setCreditCntAmt(CreditCntAmtVal);
        BigDecimal DebitCntAmtval = null;
        if(DebitCntAmt != null && !DebitCntAmt.isEmpty()){
            DebitCntAmtval = new BigDecimal(DebitCntAmt.replace("CNY", ""));
        }
        accountInfoEntityResp.setDebitCntAmt(DebitCntAmtval);
        //獲取SttlList
        Element SttlListEle = node.element("SttlList");
        //獲取SttlInf
        Element SttlInfEle = SttlListEle.element("SttlInf");
        List<Element> SttlInfList = SttlListEle.elements();
        //遍歷SttlInfList節(jié)點(diǎn)
        String SttlReptFlg  = "";
        Integer SttlDCFlg = null;
        BigDecimal SttlAmt = null;
        for(Element e : SttlInfList){
            List<BatchInf> BatchList = new ArrayList<BatchInf>();
            SttlInf sttlInf = new SttlInf();
            //SttlInf下的子節(jié)點(diǎn)
            Element SttlReptFlgEle = e.element("SttlReptFlg");
            SttlReptFlg = SttlReptFlgEle.getTextTrim();
            Element SttlDCFlgEle = e.element("SttlDCFlg");
            SttlDCFlg = Integer.valueOf(SttlDCFlgEle.getTextTrim());
            Element SttlAmtEle = e.element("SttlAmt");
            SttlAmt = new BigDecimal(SttlAmtEle.getTextTrim().replace("CNY", ""));
            //設(shè)值
            sttlInf.setSttlAmt(SttlAmt);
            sttlInf.setSttlDCFlg(SttlDCFlg);
            sttlInf.setSttlReptFlg(SttlReptFlg);
            //獲取BatchList節(jié)點(diǎn)
            Element BatchListEle = e.element("BatchList");
            //獲取BatchInf
            List<Element> BatchInfList = BatchListEle.elements();
            for(Element e2 : BatchInfList){
                List<SubItemInf> SubItemList = new ArrayList<SubItemInf>();
                BatchInf batchInf = new BatchInf();
                String BatchId = "";
                Integer BatchDCFlg = null;
                BigDecimal BatchNetAmt = null;
                Element BatchIdEle = e2.element("BatchId");
                BatchId = BatchIdEle.getTextTrim();
                Element BatchDCFlgEle = e2.element("BatchDCFlg");
                BatchDCFlg = Integer.valueOf(BatchDCFlgEle.getTextTrim());
                Element BatchNetAmtEle = e2.element("BatchNetAmt");
                BatchNetAmt = new BigDecimal(BatchNetAmtEle.getTextTrim().replace("CNY", ""));
                batchInf.setBatchDCFlg(BatchDCFlg);
                batchInf.setBatchId(BatchId);
                batchInf.setBatchNetAmt(BatchNetAmt);
                //獲取SubItemList節(jié)點(diǎn)
                Element SubItemListEle = e2.element("SubItemList");
                //獲取BatchInf
                List<Element> SubItemInfList = SubItemListEle.elements();
                for(Element e3 : SubItemInfList){
                    SubItemInf subItemInf = new SubItemInf();
                    String subItem = "";
                    subItem = e3.getTextTrim().replace("CNY", "");
                    subItemInf.setSubItemInf(subItem);
                    SubItemList.add(subItemInf);
                }
                batchInf.setSubItemList(SubItemList);
                BatchList.add(batchInf);
            }
            sttlInf.setBatchList(BatchList);
            SttlList.add(sttlInf);
        }
        accountInfoEntityResp.setSttlList(SttlList);
        return accountInfoEntityResp;
    }

dom4j解析多層xml

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
package com.bessky.hrmis.test;
import java.util.Iterator;
import org.dom4j.Document;
import org.dom4j.DocumentHelper;
import org.dom4j.Element;
import org.dom4j.io.SAXReader;
public class Dom4JDemo {
    public static void main(String[] args) throws Exception {
        // 1.創(chuàng)建Reader對(duì)象
        SAXReader reader = new SAXReader();
        String str = "<cas:serviceResponse xmlns:cas='http://www.yale.edu/tp/cas'>\r\n"
            + "    <cas:authenticationSuccess>\r\n" + "        <cas:user>hanke_tom</cas:user>\r\n"
            + "        <cas:attributes>\r\n"
            + "            <cas:credentialType>tom</cas:credentialType>\r\n"
            + "            <cas:logout_url>http://192.168.1.5:8080/sso/logout</cas:logout_url>\r\n"
            + "            <cas:isFromNewLogin>false</cas:isFromNewLogin>\r\n"
            + "            <cas:authenticationDate>2019-11-26T17:47:55.789+08:00[Asia/Shanghai]</cas:authenticationDate>\r\n"
            + "            <cas:user_id>01</cas:user_id>\r\n"
            + "            <cas:authenticationMethod>TomAuthenticationHandler</cas:authenticationMethod>\r\n"
            + "            <cas:successfulAuthenticationHandlers>TomAuthenticationHandler</cas:successfulAuthenticationHandlers>\r\n"
            + "            <cas:name>張三</cas:name>\r\n"
            + "            <cas:longTermAuthenticationRequestTokenUsed>false</cas:longTermAuthenticationRequestTokenUsed>\r\n"
            + "            <cas:job_number>00001</cas:job_number>\r\n"
            + "            <cas:username>hanke_tom</cas:username>\r\n" + "            </cas:attributes>\r\n"
            + "    </cas:authenticationSuccess>\r\n" + "</cas:serviceResponse>";
        // 2.加載xml
        Document document = DocumentHelper.parseText(str);
        // 3.獲取根節(jié)點(diǎn)
        Element rootElement = document.getRootElement();
        Iterator iterator = rootElement.elementIterator();
        
        System.out.println("根節(jié)點(diǎn):" + rootElement.getName()); // 拿到根節(jié)點(diǎn)的名稱
        
        Iterator bbbb = rootElement.elementIterator("authenticationSuccess");
        
        while (bbbb.hasNext()) {
            Element recordEless = (Element) bbbb.next();
            Iterator cccc = recordEless.elementIterator("attributes");
            while (cccc.hasNext()) {
                Element itemEle = (Element) cccc.next();
                String username = itemEle.elementTextTrim("job_number");
                System.err.println("---------"+username);
            }
        }
    }
}

如果后面還有子級(jí)繼續(xù)while向下取數(shù)據(jù)

以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持服務(wù)器之家。

原文鏈接:https://blog.csdn.net/xuri24/article/details/83113340

延伸 · 閱讀

精彩推薦
  • Java教程20個(gè)非常實(shí)用的Java程序代碼片段

    20個(gè)非常實(shí)用的Java程序代碼片段

    這篇文章主要為大家分享了20個(gè)非常實(shí)用的Java程序片段,對(duì)java開(kāi)發(fā)項(xiàng)目有所幫助,感興趣的小伙伴們可以參考一下 ...

    lijiao5352020-04-06
  • Java教程小米推送Java代碼

    小米推送Java代碼

    今天小編就為大家分享一篇關(guān)于小米推送Java代碼,小編覺(jué)得內(nèi)容挺不錯(cuò)的,現(xiàn)在分享給大家,具有很好的參考價(jià)值,需要的朋友一起跟隨小編來(lái)看看吧...

    富貴穩(wěn)中求8032021-07-12
  • Java教程Java實(shí)現(xiàn)搶紅包功能

    Java實(shí)現(xiàn)搶紅包功能

    這篇文章主要為大家詳細(xì)介紹了Java實(shí)現(xiàn)搶紅包功能,采用多線程模擬多人同時(shí)搶紅包,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙...

    littleschemer13532021-05-16
  • Java教程Java使用SAX解析xml的示例

    Java使用SAX解析xml的示例

    這篇文章主要介紹了Java使用SAX解析xml的示例,幫助大家更好的理解和學(xué)習(xí)使用Java,感興趣的朋友可以了解下...

    大行者10067412021-08-30
  • Java教程Java BufferWriter寫(xiě)文件寫(xiě)不進(jìn)去或缺失數(shù)據(jù)的解決

    Java BufferWriter寫(xiě)文件寫(xiě)不進(jìn)去或缺失數(shù)據(jù)的解決

    這篇文章主要介紹了Java BufferWriter寫(xiě)文件寫(xiě)不進(jìn)去或缺失數(shù)據(jù)的解決方案,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望...

    spcoder14552021-10-18
  • Java教程Java8中Stream使用的一個(gè)注意事項(xiàng)

    Java8中Stream使用的一個(gè)注意事項(xiàng)

    最近在工作中發(fā)現(xiàn)了對(duì)于集合操作轉(zhuǎn)換的神器,java8新特性 stream,但在使用中遇到了一個(gè)非常重要的注意點(diǎn),所以這篇文章主要給大家介紹了關(guān)于Java8中S...

    阿杜7482021-02-04
  • Java教程xml與Java對(duì)象的轉(zhuǎn)換詳解

    xml與Java對(duì)象的轉(zhuǎn)換詳解

    這篇文章主要介紹了xml與Java對(duì)象的轉(zhuǎn)換詳解的相關(guān)資料,需要的朋友可以參考下...

    Java教程網(wǎng)2942020-09-17
  • Java教程升級(jí)IDEA后Lombok不能使用的解決方法

    升級(jí)IDEA后Lombok不能使用的解決方法

    最近看到提示IDEA提示升級(jí),尋思已經(jīng)有好久沒(méi)有升過(guò)級(jí)了。升級(jí)完畢重啟之后,突然發(fā)現(xiàn)好多錯(cuò)誤,本文就來(lái)介紹一下如何解決,感興趣的可以了解一下...

    程序猿DD9332021-10-08
主站蜘蛛池模板: 日本小网站 | 国产图片综合区 | 亚洲欧洲淘宝天堂日本 | 12一14性xxxxx国外 | 美女被吸乳老师羞羞漫画 | 国产色拍| hd最新国产人妖ts视频 | 欧美亚洲桃花综合 | 国产日韩成人 | 秋霞黄色网 | 精品国产成a人在线观看 | 国产香蕉一区二区精品视频 | 果冻传媒九一制片厂 | 黄网国产| 久9视频这里只有精品123 | 亚欧日韩 | 91这里只有精品 | 亚洲 欧美 日韩 综合 | 国产精品热久久毛片 | 国产最强大片免费视频 | 国内久久精品 | 国产成人久久久精品一区二区三区 | 亚洲一二三区久久五月天婷婷 | 激情六月丁香婷婷四房播 | 性xxx欧美 | 波多野结衣之高校教师 | 温柔校草高h | 99热色| 国产免费资源高清小视频在线观看 | 日韩欧美一区二区在线观看 | 久久精品黄AA片一区二区三区 | 久久xxxx | 十六以下岁女子毛片免费 | 日本xxxxx69hd日本 | 特黄特级高清免费视频毛片 | 国产趴着打光屁股sp抽打 | 污网站免费观看在线高清 | 日本最新伦中文字幕 | 色先锋影音资源 | 91制片厂制作传媒网站破解 | 白发在线视频播放观看免费 |