0 CT|NOV|DEC|01 |02|03|04|05|06!07j08|09| 10| 11112)(\d{2) )9)9) ([A-Z](3i)([A-Z]{3)) +(PART(\d{l,2))) *?(NIL)^\sn(('\w(1,10) )/^(\d{l,2 j ))'? *-?([A-Z] {3}) C>:([0-9](K3!)[A-Z]) (\d J1,3) )B((\d {\A} )\.?(\d+)?(K|L)?)? ?((\w-Wf> ())-) 9(\.CHD(\d (1.2; ))f>(\.INF(\d { 1J] ))9(\,RQ|\.SA|\.RR|\.HL)^(1 ){0) )\s*)HEND((PART\d J 1,2)
[0105] <!-這里regx即為第一正則表達(dá)式--> <item name=,,flightNuiri''> 1 </item> <item nam e:=r" day">4</i tern> < i I e m n a in e=" m on f h" >6</i tern > <item name=" airport" > 8 < /i tera> <ilem naine_,!changeAii'port">9</iteni> <item name="part"> 10</iteiri> <itera narae=''endPart">35</ite!n> <list naine='!passengerList" groupIndex= Ml 1" entity4-"cn.ait.demo.message.PtmPassenger" <!-這里entity即為第三實(shí)體 regx="((\w{\A0\)/?(\d{1,2j ),.>(/(S|N))f> ^-9([A-Z] {3)) (°:([0-9] (1,3})|;A-Z]) (\d{1,3) )B((\d(1,4) Vi.^Ad+j^KIL)^)9 ?((\w+/f> ?)*) '>{\.CHD(\d (1,2) ))f>(\.]NF(\d{ 1,2 j ))')(\.RQ|\.SA|\.RR|\.HL)?⑴{0) )\s*"-> <!-這里regx即為第二正則表達(dá)式 <item nairie="connFlightiNuniber">2</iteni> <iteni name=!,coiinDate">3</itein> <item name="arrivalAirport">6</item> <item name=',seatNuaiber!' fieldType=wint">7</item> <item name="luggageNum" fieldType="int">8</item> <item name=!')DassengerName">] 3</itern> 〈item nam.e=":childN曬ber" fieldType="int">16</item> <itcm nanic="infantsNuinbcr" ficld'Typc="int"> i 8</itcni>
[0106] </part> </parser>
[0107] 由此可知,模板2中包含有:第一實(shí)體(entiey)和一個解析器(part),解析器以 〈/part〉結(jié)束。
[0108] 解析器包含有:第一正則表達(dá)式(regx)、七個屬性(item)和一個第一實(shí)體列表 (list),類型為屬性(attribute);其中,每一個屬性以〈/item〉結(jié)束,第一實(shí)體列表以〈/ list〉結(jié)束。
[0109] 第一實(shí)體列表中包含有:第三實(shí)體(entity)、第二正則表達(dá)式(regX5)和八個屬 性。
[0110] 步驟201、根據(jù)預(yù)先設(shè)置的PTM報文的模板對PTM報文進(jìn)行解析。
[0111] 本步驟中,對于模板1,具體解析過程如下:
[0112] 對于第一個解析器,判斷出解析器的類型為屬性,獲取第一正則表達(dá)式regxl,將 PTM報文與regxl進(jìn)行匹配,匹配成功,得到第一匹配內(nèi)容為KE5820/12N0V GMPPEK PART1, 然后在第一匹配內(nèi)容中獲取每一個屬性對應(yīng)的第二匹配內(nèi)容,分別為航班號(flightNum): KE582〇,航班日期(日)(day) :12,航班日期(月)(month) :N0V,起飛機(jī)場(airport) :GMP, 中轉(zhuǎn)機(jī)場(changeAirport) :PEK,報文部分(part) :PART1將獲得的各個屬性保存到第一實(shí) 體(entityl)中。
[0113] 對于第二個解析器,判斷出解析器的類型為列表,獲取第一正則表達(dá)式regx2,將 PTM報文與regx2進(jìn)行匹配,匹配成功,得到第一匹配內(nèi)容為AF935/18CCS 4Y 8B LI/WANG/ BINTO. CHD2. INF1,在第一匹配內(nèi)容中獲取每一個屬性對應(yīng)的第二匹配內(nèi)容,分別為轉(zhuǎn)航班 號(connFlightNumber) :AF935,中轉(zhuǎn)日期(connDate) :18,目的機(jī)場(arrivalAirport): CCS,座位數(shù)量(seatNumber) :4,行李數(shù)量(luggageNum) :8,乘客姓名(passengerName): LI/WANG/BINT0,兒童數(shù)量(childNumber) :2,嬰兒數(shù)量(infantsNumber) :1 ;將獲得的各個 屬性保存到第二實(shí)體(entity2)中;
[0114] 再次將PTM報文與regx2進(jìn)行匹配,匹配成功,得到第一匹配內(nèi)容為AF936/18CXD 3Y 3B ZHANG/SAN. CHD1. INF1,在第一匹配內(nèi)容中獲取每一個屬性對應(yīng)的第二匹配內(nèi)容, 分別為中轉(zhuǎn)航班號(connFlightNumber) :AF936,中轉(zhuǎn)日期(connDate) :18,目的機(jī)場 (arrivalAirport) :CO),座位數(shù)量(seatNumber) :3,行李數(shù)量(luggageNum) :3,乘客姓名 (passengerName) :ZHANG/SAN,兒童數(shù)量(childNumber) :1,嬰兒數(shù)量(infantsNumber) :1; 第三次未匹配到內(nèi)容;將獲得的各個屬性保存到第二實(shí)體(entity2)中。
[0115] 再次將PTM報文與regX2進(jìn)行匹配,匹配不成功,將第二實(shí)體(entity2)保存到第 一實(shí)體(entityl)中。
[0116] 對于第三個解析器,判斷出解析器的類型為屬性,獲取第一正則表達(dá)式regx3,將 PTM報文與regx3進(jìn)行匹配,匹配成功,得到第一匹配內(nèi)容ENDPTM,即提取到結(jié)束標(biāo)記,PTM 報文解析結(jié)束。
[0117] 對于模板2,具體解析過程如下:
[0118] 對于解析器,判斷出解析器的類型為屬性,獲取第一正則表達(dá)式regx4,將PTM報 文與reg X4進(jìn)行匹配,匹配成功,得到第一匹配內(nèi)容:
[0119] KE5820/12N0V GMPPEK PARTI
[0120] AF935/18CCS 4Y 8B LI/ffANG/BINTO. CHD2. INF1
[0121] AF936/18CCD 3Y 3B ZHANG/SAN. CHD1. INF1
[0122] 然后在第一匹配內(nèi)容中獲取每一個屬性對應(yīng)的第二匹配內(nèi)容,分別為航班號 (flightNum) :KE582〇,航班日期(日)(day) :12,航班日期(月)(month) :N0V,起飛機(jī) 場(airport) :GMP,中轉(zhuǎn)機(jī)場(changeAirport) :PEK,報文部分(part) :PART1,結(jié)束標(biāo)記: ENDPTM。
[0123] 對于第一實(shí)體列表,在第一匹配內(nèi)容中獲取第一實(shí)體列表對應(yīng)的第三匹配內(nèi)容:
[0124] AF935/18CCS 4Y 8B LI/ffANG/BINTO. CHD2. INF1
[0125] AF936/18CCD 3Y 3B ZHANG/SAN. CHD1. INF1
[0126] 獲取第一實(shí)體列表中的第二正則表達(dá)式(regx5),將第三匹配內(nèi)容與第二正則 表達(dá)式進(jìn)行匹配,匹配成功,得到第四匹配內(nèi)容AF935/18CCS 4Y 8B LI/WANG/BINT0. CHD2. INF1,然后在第四匹配內(nèi)容中獲取第一實(shí)體列表中的每一個屬性對應(yīng)的第五匹配 內(nèi)容,分別為中轉(zhuǎn)航班號(connFlightNumber) :AF935,中轉(zhuǎn)日期(connDate) :18,目的 機(jī)場(arrivalAirport) :CCS,座位數(shù)量(seatNumber) :4,行李數(shù)量(luggageNum) :8, 乘客姓名(passengerName) :LI/WANG/BINT0,兒童數(shù)量(childNumber) :2,嬰兒數(shù)量 (infantsNumber) : 1
[0127] 繼續(xù)將第三匹配內(nèi)容與第二正則表達(dá)式進(jìn)行匹配,匹配成功,得到第四匹配內(nèi)容 AF936/18CXD 3Y 3B ZHANG/SAN. CHD1.INF1,然后在第四匹配內(nèi)容中獲取第一實(shí)體列表中 的每一個屬性對應(yīng)的第五匹配內(nèi)容,分別為中轉(zhuǎn)航班號(connFlightNumber) :AF936,中轉(zhuǎn) 日期(connDate) :18,目的機(jī)場(arrivalAirport) :CO),座位數(shù)量(seatNumber) :3,行李 數(shù)量(luggageNum) :3,乘客姓名(passengerName) :ZH