關於C#對Xml數據解析


首先進行簡單說明Xml 與Html  和 XAML數據標簽的差別。

1.Xml屬於數據文本, 被設計為傳輸和存儲數據,其焦點是數據的內容。它與json格式數據相似,可作為服務數據傳輸類型。

   其中XML是標准通用標記語言 (SGML) 的子集,非常適合 Web 傳輸。XML 提供統一的方法來描述和交換獨立於應用程序或供應商的結構化數據。

  

  (1).XML的優缺點
   <1>.XML的優點
  A.格式統一,符合標准;
  B.容易與其他系統進行遠程交互,數據共享比較方便。
   <2>.XML的缺點
  A.XML文件龐大,文件格式復雜,傳輸占帶寬;
  B.服務器端和客戶端都需要花費大量代碼來解析XML,導致服務器端和客戶端代碼變得異常復雜且不易維護;
  C.客戶端不同瀏覽器之間解析XML的方式不一致,需要重復編寫很多代碼;
  D.服務器端和客戶端解析XML花費較多的資源和時間。

  (2).JSON的優缺點
   <1>.JSON的優點:
  A.數據格式比較簡單,易於讀寫,格式都是壓縮的,占用帶寬小;
  B.易於解析,客戶端JavaScript可以簡單的通過eval()進行JSON數據的讀取;
  C.支持多種語言,包括ActionScript, C, C#, ColdFusion, Java, JavaScript, Perl, PHP, Python, Ruby等服務器端語言,便於服務器端的解析;
  D.在PHP世界,已經有PHP-JSON和JSON-PHP出現了,偏於PHP序列化后的程序直接調用,PHP服務器端的對象、數組等能直接生成JSON格式,便於客戶端的訪           問提取;
  E.因為JSON格式能直接為服務器端代碼使用,大大簡化了服務器端和客戶端的代碼開發量,且完成任務不變,並且易於維護。
   <2>.JSON的缺點
  A.沒有XML格式這么推廣的深入人心和喜用廣泛,沒有XML那么通用性;
  B.JSON格式目前在Web Service中推廣還屬於初級階段。

2.HTML 被設計用來顯示數據,其焦點是數據的外觀。主要是網頁界面數據展示,以及多媒體處理等。

3.XAML相應的中文名稱為可擴展應用程序標記語言,它是微軟公司為構建應用程序用戶界面而創建的一種新的描述性語言。XAML提供了一種便於擴展和定位的語法來定義和程序邏輯分離的用戶界面,而這種實現方式和ASP.NET中的"代碼后置"模型非常類似。XAML是一種解析性的語言,盡管它也可以被編譯。它的優點是簡化編程式上的用戶創建過程,應用時要添加代碼和配置等。

使用XAML開發人員可以對WPF程序的所有用戶界面元素(例如文本、按鈕、圖像和列表框等)進行詳細的定置,同時還可以對整個界面進行合理化的布局,這與使用HTML非常相似。但是由於XAML是基於XML的,所以它本身就是一個組織良好的XML文檔,而且相對於HTML,它的語法更嚴謹、更明確。預計以后大部分的XAML都可由相應的軟件自動生成,就如同我們現在制作一個靜態頁面時,幾乎不用編寫任何HTML代碼就可以直接通過Dreamweaver軟件生成一個美觀的頁面。但是最初通過手動編寫XAML代碼將是一次絕佳的學習體驗,雖然實現的過程繁雜了些,但是將加深您對XAML語法和各個元素的理解。

---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

區分完畢之后 ,本次主要是對xml數據解析開發過程中所遇到的問題進行總結。解析Xml數據轉數據模型

xml數據結構如下:

 1 <?xml version="1.0"?>
 2 <GuaHaoYJS_OUT>
 3 <ERRNO>0</ERRNO>
 4 <ERRMSG>交易成功</ERRMSG>
 5 <ITEMS>
 6 <ITEM>
 7 <SHOUFEIXMZL>2</SHOUFEIXMZL>
 8 <SHOUFEIXMLB>51</SHOUFEIXMLB>
 9 <CHUFANGHAO>1003403761-122786</CHUFANGHAO>
10 <CHUFANGRQ>YYYY09DD18249ISS</CHUFANGRQ>
11 <YIYUANSFXMNM>122786</YIYUANSFXMNM>
12 <SHOUFEIXMZXBM>100634</SHOUFEIXMZXBM>
13 <YIYUANSFXMMC>口腔科診察費</YIYUANSFXMMC>
14 <DANJIA>7</DANJIA>
15 <SHULIANG>1</SHULIANG>
16 </ITEM>
17 <ITEM>
18 <SHOUFEIXMZL>2</SHOUFEIXMZL>
19 <SHOUFEIXMLB>92</SHOUFEIXMLB>
20 <CHUFANGHAO>1003403761-122786</CHUFANGHAO>
21 <CHUFANGRQ>YYYY09DD18249ISS</CHUFANGRQ>
22 <YIYUANSFXMNM>122786</YIYUANSFXMNM>
23 <SHOUFEIXMZXBM>110100001</SHOUFEIXMZXBM>
24 <YIYUANSFXMMC>急診掛號</YIYUANSFXMMC>
25 <DANJIA>0</DANJIA>
26 <SHULIANG>1</SHULIANG>
27 </ITEM>
28 </ITEMS>
29 <HEJIJE>7</HEJIJE>
30 <GUAHAOFEI>0</GUAHAOFEI>
31 <ZHENLIAOFEI>7</ZHENLIAOFEI>
32 <JIUZHENLSH>GH1003403761</JIUZHENLSH>
33 <YILIAOLB>11</YILIAOLB>
34 <RUYUANNJBBM>Z00.001</RUYUANNJBBM>
35 <RUYUANJBMC>健康查體</RUYUANJBMC>
36 <YISHENGDM>無</YISHENGDM>
37 <YISHENGXM>無</YISHENGXM>
38 <YIBAODJH>1003403761</YIBAODJH>
39 <YIBAOZHSYBZ>1</YIBAOZHSYBZ>
40 <YIBAOZTJSBZ>0</YIBAOZTJSBZ>
41 </GuaHaoYJS_OUT>
View Code

 

 數據模型類如下:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Xml.Serialization;

namespace DataModel
{
    [XmlRoot(ElementName = "GuaHaoYJS_OUT")]
    [Serializable]
    public class GuaHaoYJS_OUT
    {
        [XmlElement(ElementName = "ERRNO")]
        public string ERRNO { set; get; }
        [XmlElement(ElementName = "ERRMSG")]
        public string ERRMSG { set; get; }
        [XmlElement(ElementName = "HEJIJE")]
        public string HEJIJE { set; get; }
        [XmlElement(ElementName = "GUAHAOFEI")]
        public string GUAHAOFEI { set; get; }
        [XmlElement(ElementName = "ZHENLIAOFEI")]
        public string ZHENLIAOFEI { set; get; }
        [XmlElement(ElementName = "JIUZHENLSH")]
        public string JIUZHENLSH { set; get; }
        [XmlElement(ElementName = "YILIAOLB")]
        public string YILIAOLB { set; get; }
        [XmlElement(ElementName = "RUYUANNJBBM")]
        public string RUYUANNJBBM { set; get; }
        [XmlElement(ElementName = "RUYUANJBMC")]
        public string RUYUANJBMC { set; get; }
     
        [XmlElement(ElementName = "YISHENGDM")]
        public string YISHENGDM { set; get; }
        [XmlElement(ElementName = "YISHENGXM")]
        public string YISHENGXM { set; get; }
        [XmlElement(ElementName = "YIBAODJH")]
        public string YIBAODJH { set; get; }
        [XmlElement(ElementName = "YIBAOZHSYBZ")]
        public string YIBAOZHSYBZ { set; get; }
        [XmlElement(ElementName = "YIBAOZTJSBZ")]
        public string YIBAOZTJSBZ { set; get; }
        [XmlArray("ITEMS"), XmlArrayItem("ITEM")]
        public ITEM[] ITEMS { set; get; }

    }
    [XmlRoot("ITEM")]
    public class ITEM
    {
        [XmlElement(ElementName = "SHOUFEIXMZL")]
        public string SHOUFEIXMZL { set; get; }
        [XmlElement(ElementName = "SHOUFEIXMLB")]
        public string SHOUFEIXMLB { set; get; }
        [XmlElement(ElementName = "CHUFANGHAO")]
        public string CHUFANGHAO { set; get; }
        [XmlElement(ElementName = "CHUFANGRQ")]
        public string CHUFANGRQ { set; get; }
        [XmlElement(ElementName = "YIYUANSFXMNM")]

        public string YIYUANSFXMNM { set; get; }
        [XmlElement(ElementName = "SHOUFEIXMZXBM")]
        public string SHOUFEIXMZXBM { set; get; }
        [XmlElement(ElementName = "YIYUANSFXMMC")]
        public string YIYUANSFXMMC { set; get; }
        [XmlElement(ElementName = "DANJIA")]
        public string DANJIA { set; get; }
        [XmlElement(ElementName = "SHULIANG")]
        public string SHULIANG { set; get; }
      
    }
}
View Code

 

 前台轉換代碼:

1       GuaHaoYJS_OUT dataModel =  XmlUtil.Deserialize(typeof(GuaHaoYJS_OUT), str) as GuaHaoYJS_OUT;
View Code

 

好了這里前面的那些代碼,是備注給自己看的。真的爬坑過程中比較深的是在下面的估計看到這里都有人想打人的欲望,畢竟看了那漫長的代碼了。淡定,我已經優先折疊起來了,就是不給看的意思。哈哈

由於上學不努力,之前真的沒留意xml數據界面轉換有那么異常錯誤什么:異常文檔(1, 23)中有錯誤。不應有 <  xmlns='' 

把我查的一哭。

這個錯誤提示是:異常文檔(1, 23)中有錯誤,仔細看異常信息提示的是:不應有 < 標簽名 xmlns=''> 這樣的信息是告訴我,model數據類有一個類型是和xml數據節點匹配不上。不是一一對應的關系。

解決完這個之后,再往下發現自己xml數據存在集合數據,再轉數組的時候總是轉換為空數據,沒有解析數據。

原因是:需要使用這個 [XmlArray("ITEMS"), XmlArrayItem("ITEM")]   這樣節點類型進行XML數組集合的數據進行model模型類的數據進行數組轉換。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM