关于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>
数据模型类如下:
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; } } }
前台转换代码:
1 GuaHaoYJS_OUT dataModel = XmlUtil.Deserialize(typeof(GuaHaoYJS_OUT), str) as GuaHaoYJS_OUT;
好了这里前面的那些代码,是备注给自己看的。真的爬坑过程中比较深的是在下面的估计看到这里都有人想打人的欲望,毕竟看了那漫长的代码了。淡定,我已经优先折叠起来了,就是不给看的意思。哈哈
由于上学不努力,之前真的没留意xml数据界面转换有那么异常错误什么:异常文档(1, 23)中有错误。不应有 < xmlns='' 等
把我查的一哭。
这个错误提示是:异常文档(1, 23)中有错误,仔细看异常信息提示的是:不应有 < 标签名 xmlns=''> 这样的信息是告诉我,model数据类有一个类型是和xml数据节点匹配不上。不是一一对应的关系。
解决完这个之后,再往下发现自己xml数据存在集合数据,再转数组的时候总是转换为空数据,没有解析数据。
原因是:需要使用这个 [XmlArray("ITEMS"), XmlArrayItem("ITEM")] 这样节点类型进行XML数组集合的数据进行model模型类的数据进行数组转换。