2013年9月11日 星期三
載入XML,讀入XML中所有節點資料
[-- 範例XML start --]
<?xml version="1.0" encoding="UTF-8" ?>
<TKROOTMAIN>
<TKTSUBDCONT>
<TKRECDSET>
<TKSQID published="1">2294-00001</TKSQID>
<TKUSENOTE>
<TKUSELIMIT>
<item>
<LMTSQ>1</LMTSQ>
<LMTTEXT>
<![CDATA[※根據各國的入境新規定,所有前往中國大陸/日本/韓國/美加/紐澳線之旅客必須於訂位時,提供旅客相關証件資料,內容包括:姓名、國籍、性別、出生日期、護照或台胞證號碼、有效期限、當地之詳細地址及居住國等相關資料,請務必於訂購時將相關之資料填寫於訂單之備註欄中。以免影響旅客登機作業** ※淡旺季日期票價之適用出發日區分:1.美加線:以日本出發航段計算。2.其它航線:以台灣出發航段計算。而機票之效期計算方式仍以台灣出發日為計算基準。]]>
</LMTTEXT>
</item>
<item>
<LMTSQ>2</LMTSQ>
<LMTTEXT>
<![CDATA[※全程未使用退票手續費(退票時間約需2個月以上),收費標準如下:航空公司退票手續費或罰金TWD1500+東南旅行社作業服務費:售價的8%。部分使用之退票費用,請洽詢您的業務承辦人員。 ※機票一經使用不可退票。 ※ 退票辦法依各航空公司各路線之規定辦理(限於機票效期內申請),本公司會酌收手續費。]]>
</LMTTEXT>
</item>
<item>
<LMTSQ>3</LMTSQ>
<LMTTEXT>
<![CDATA[※機票一經開立後不可更改行程。 ※【歐洲線】更改日期航班規則:1.S艙:【機票未使用前】去程:不可更改;回程:可。【出發後】回程:每次需收罰金TWD 1000+手續費。2.L艙:【機票未使用前】去/回程不可更改。【出發後】回程:每次需收罰金TWD 1000+手續費。若更改導致票價不同時須支付差額。 ※機票所有更改訂位等事宜須於每次更改訂位後24小時內且須於原訂位之航班出發前立即完成改票付費(不可NO SHOW)!否則該機票視為無效機票!(如遇假日須提前作業)。 ※如因更改日期/航班/行程導致無法連結而必須重新作業或更改機票重新開立時,除了航空公司得收取改票手續費外,本公司亦需另外收取改票服務費TWD600
(如有稅金票價差額亦需補收)。]]>
</LMTTEXT>
</item>
</TKUSELIMIT>
</TKUSENOTE>
<TICKETPRICE>
<item>
<PRICETYPE>B2C</PRICETYPE>
<PRICELEVL>
<item>
<LEVELTYPE>ADT</LEVELTYPE>
<TKPRICE>29425.000</TKPRICE>
<DISCTKPRICE>29130.750</DISCTKPRICE>
<INCLDPRICE>0</INCLDPRICE>
<BSP>0</BSP>
</item>
<item>
<LEVELTYPE>CHILDS</LEVELTYPE>
<TKPRICE>0.000</TKPRICE>
<DISCTKPRICE>0.000</DISCTKPRICE>
<INCLDPRICE>0</INCLDPRICE>
<BSP>0</BSP>
</item>
<item>
<LEVELTYPE>INF</LEVELTYPE>
<TKPRICE>0.000</TKPRICE>
<DISCTKPRICE>0.000</DISCTKPRICE>
<INCLDPRICE>0</INCLDPRICE>
<BSP>0</BSP>
</item>
</PRICELEVL>
</item>
</TICKETPRICE>
<TICKETOTHERFARE>
<STOPADDPRICE faretypetp="2" moststoppoint="0" stopcondi="1">
<item>
<SEGNO>1</SEGNO>
<ROUTEDESC>TPE/NRT</ROUTEDESC>
<ADDUSEDTAREA>20130420/20130930</ADDUSEDTAREA>
<LIMITWEEKEND>1,1,1,1,1,1,1</LIMITWEEKEND>
<FARETYPESUB/>
<ADTFARETYPEM>2000.000</ADTFARETYPEM>
<CHDFARETYPEM>2000.000</CHDFARETYPEM>
<INFFARETYPEM>2000.000</INFFARETYPEM>
</item>
<item>
<SEGNO>3</SEGNO>
<ROUTEDESC>MUC/NRT</ROUTEDESC>
<ADDUSEDTAREA>20130420/20130930</ADDUSEDTAREA>
<LIMITWEEKEND>1,1,1,1,1,1,1</LIMITWEEKEND>
<FARETYPESUB/>
<ADTFARETYPEM>2000.000</ADTFARETYPEM>
<CHDFARETYPEM>2000.000</CHDFARETYPEM>
<INFFARETYPEM>2000.000</INFFARETYPEM>
</item>
</STOPADDPRICE>
</TICKETOTHERFARE>
</TKRECDSET>
</TKTSUBDCONT>
</TKROOTMAIN>
[-- 範例XML end --]
[-- 載入XML,讀入XML中所有節點資料 start --]
XDocument xdoc = default(XDocument);
//載入XML檔案
try
{
xdoc = XDocument.Load(Xmlfile);
}
catch (XmlException ex)
{
//刪除XML格式錯誤的檔案
FileInfo fi = new FileInfo(Xmlfile);
fi.Delete();
}
//Linq for XML,讀入XML中所有節點資料
var xNodeList = from nl in xdoc.Descendants("TKRECDSET")
select new
{
TSUBD_CD = nl.Element("TKSQID").Value,
TSUBD_LMT_DR = nl.Element("TKUSENOTE").Element("TKUSELIMIT"),
TICKETPRICEB2C = (from TICKETPRICE in nl.Elements("TICKETPRICE").Elements("item")
where TICKETPRICE.Element("PRICETYPE").Value == "B2C"
select TICKETPRICE).ToList(),
STOPADDPRICE = nl.Descendants("TICKETOTHERFARE").Elements("STOPADDPRICE").Elements("item").ToList()
};
//解析節點下的所有資訊
foreach (var TicketItem in xNodeList)
{
string TSUBD_CD = TicketItem.TSUBD_CD;
//該節點資料為多筆,再次解析所有資訊
foreach (var tf in TicketItem.STOPADDPRICE)
{
FARE_WK_DY = tf.Element("LIMITWEEKEND").Value;
}
}
[-- 載入XML,讀入XML中所有節點資料 end --]
************************************************************************************************************
[-- 遠端回傳的範例XML start --]
<?xml version="1.0" ?>
<Result>
<oSQL>select G.ACCT_NO as SACCT_NO, G.GRUP_CD, G.GRUP_NM,isNull(G.GRUP_SNM,'') as GRUP_SNM , isNull(G.ITN_CITY,'') as ITN_CITY, G.MGRUP_CD , G.ORDER_DL, G.GRUP_LN, isNull(G.GRUP_RK,'') as GRUP_RK, isNull(G.HOT_TP,'') as HOT_TP , isNull((select AGT_AM from TRGPRICE where ACCT_NO = G.ACCT_NO and GRUP_CD=G.GRUP_CD and BED_TP = '1' AND AMRNK='1' AND JOIN_TP='1'),0) as AGT_AM , 'CURR_AM'=case when P.CURR_AM>X.CURR_AM then P.CURR_AM ELSE X.CURR_AM end , G.LEAV_DT , G.B2B2C_FG, isNull(G.ESTM_YQT,0) as ESTM_YQT, isNull(G.DONE_YQT, 0) as DONE_YQT, isNull(G.SALE_YQT,0) as SALE_YQT , (P.CURR_AM-isNull((select AGT_AM from TRGPRICE where ACCT_NO = G.ACCT_NO and GRUP_CD=G.GRUP_CD and BED_TP = '1' and AGT_AM <=P.CURR_AM and AMRNK='1' and JOIN_TP='1'),0)) as bonus, isNull((SELECT SUM(ATT_AM) FROM TRGOPITEM O WHERE O.ACCT_NO = G.ACCT_NO AND O.GRUP_CD = G.GRUP_CD AND isNull(VISA_CD,'') = ''),0) AS OTHER_AM from TRGRUPIDX as G inner Join TRGRUPREF as P on P.SACCT_NO = G.ACCT_NO and P.GRUP_CD=G.GRUP_CD and P.BED_TP = '1' and P.ACCT_NO = '04436435' left outer join TRGPRICE X on G.GRUP_CD = X.GRUP_CD and X.BED_TP='1' and X.ACCT_NO =G.ACCT_NO and X.JOIN_TP='1' where G.GRUP_CD in (select distinct GRUP_CD from TRGRUPREF where ACCT_NO = '04436435') and G.ORDER_DL>'2013/09/10' and isNull(G.DEL_FG,0) = 0 and not (P.CURR_AM = 0 and X.CURR_AM =0 ) and ITN_NATN<>'TW' and isNull((select AGT_AM from TRGPRICE where ACCT_NO = G.ACCT_NO and ACCT_NO <> '04436435' and GRUP_CD=G.GRUP_CD and BED_TP = '1' AND AMRNK='1' AND JOIN_TP='1'),9999) > 0 and P.JOIN_TP = '1' and P.AMRNK <> 0 order by LEAV_DT</oSQL>
<oRecCnt>918</oRecCnt>
<oPgCnt>918</oPgCnt>
<oErrMsg></oErrMsg>
<oXml>
<grup_list no="1">
<sacct_no>04436435</sacct_no>
<grup_cd>PST05130912A</grup_cd>
<grup_nm>泰航假期~愛上華欣五日</grup_nm>
<grup_snm>泰航假期~愛上華欣五日</grup_snm>
<mgrup_cd>PST05</mgrup_cd>
<itn_city>BKK/HHQ</itn_city>
<order_dl>2013/09/12</order_dl>
<grup_ln>5</grup_ln>
<grup_rk>&lt;DIV style=&quot;FONT-FAMILY: 新細明體; LETTER-SPACING: 1pt; FONT-SIZE: 10pt; top-margin: 0pt; left-margin: 0pt&quot;&gt;&lt;P style=&quot;LINE-HEIGHT: 12pt; MARGIN: 0cm 0cm 0pt; FONT-FAMILY: 新細明體; LETTER-SPACING: 1pt; FONT-SIZE: 10pt; top-margin: 0pt; left-margin: 0pt; mso-line-height-rule: exactly&quot; class=MsoNormal&gt;&lt;SPAN style=&quot;FONT-FAMILY: 標楷體; COLOR: black; mso-hansi-font-family:</grup_rk>
<hot_tp></hot_tp>
<agt_am>34000</agt_am>
<curr_am>37000</curr_am>
<leav_dt>2013/09/12</leav_dt>
<b2b2c_fg>False</b2b2c_fg>
<estm_yqt>10</estm_yqt>
<done_yqt>0</done_yqt>
<sale_yqt>10</sale_yqt>
<bonus>3000</bonus>
<other_am>18000</other_am>
</grup_list>
</oXml>
<InputData>
<iACCT_NO>04436435</iACCT_NO>
<iMGRUP_CD></iMGRUP_CD>
<iSACCT_NO>04436435,</iSACCT_NO>
<iNATN></iNATN>
<iCITY></iCITY>
<iBDT></iBDT>
<iEDT></iEDT>
<iDayLN1></iDayLN1>
<iDayLN2></iDayLN2>
<iAIR_PT></iAIR_PT>
<iAMB></iAMB>
<iAME></iAME>
</InputData>
</Result>
[-- 遠端回傳的範例XML end --]
[-- 載入遠端的XML,讀入XML中所有節點資料 start --]
Response.BufferOutput = false;
Response.Clear();
//取得遠端的團體行程XML
string url = "http://www.ftstour.com.tw/eWeb/GODC/L_GO_list2.asp?pagesize=1&page=1";
WebClient myWebClient = new WebClient();
myWebClient.Proxy = null; //.NET中的默認代理是開啟的,使用默認代理時,只有等待超時後才會繞過代理,從而導致第一次連接特別慢
byte[] myDataBuffer = myWebClient.DownloadData(url);
string strWebData = Encoding.Default.GetString(myDataBuffer);
Stream sm = new MemoryStream(ASCIIEncoding.UTF8.GetBytes(strWebData.Trim()));
XmlReader xmlread = XmlReader.Create(sm);
doc = XDocument.Load(xmlread);
//取得團體行程總筆數
int totalRecord = Convert.ToInt32(doc.Root.Element("oRecCnt").Value);
//逐筆取得所有行程詳細內容
for (int i = 0; i < totalRecord; i++)
{
url = "http://www.ftstour.com.tw/eWeb/GODC/L_GO_list2.asp?pagesize=1&page=" + (i + 1).ToString();
myDataBuffer = myWebClient.DownloadData(url);
strWebData = Encoding.Default.GetString(myDataBuffer);
sm = new MemoryStream(ASCIIEncoding.UTF8.GetBytes(strWebData.Trim()));
xmlread = XmlReader.Create(sm);
doc = XDocument.Load(xmlread);
childList = from el in doc.Root.Elements("oXml").Descendants("grup_list")
select el;
s = "";
string strGroup = "";
foreach (XNode el in childList.DescendantNodes())
{
//判斷節點型別,轉型為XElement
if (el.NodeType == XmlNodeType.Element)
{
XElement xl = ((System.Xml.Linq.XElement)(el));
if (!string.IsNullOrEmpty(xl.Value))
{
strGroup += s + xl.Name + "=" + xl.Value;
s = "<br>";
}
}
}
Response.Write("<hr>" + strGroup);
Response.Flush();
}
[-- 載入遠端的XML,讀入XML中所有節點資料 end --]
訂閱:
張貼留言 (Atom)
沒有留言:
張貼留言