关于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数据结构如下:
<?xml version="1.0"?>
<GuaHaoYJS_OUT>
<ERRNO></ERRNO>
<ERRMSG>交易成功</ERRMSG>
<ITEMS>
<ITEM>
<SHOUFEIXMZL></SHOUFEIXMZL>
<SHOUFEIXMLB></SHOUFEIXMLB>
<CHUFANGHAO>-</CHUFANGHAO>
<CHUFANGRQ>YYYY09DD18249ISS</CHUFANGRQ>
<YIYUANSFXMNM></YIYUANSFXMNM>
<SHOUFEIXMZXBM></SHOUFEIXMZXBM>
<YIYUANSFXMMC>口腔科诊察费</YIYUANSFXMMC>
<DANJIA></DANJIA>
<SHULIANG></SHULIANG>
</ITEM>
<ITEM>
<SHOUFEIXMZL></SHOUFEIXMZL>
<SHOUFEIXMLB></SHOUFEIXMLB>
<CHUFANGHAO>-</CHUFANGHAO>
<CHUFANGRQ>YYYY09DD18249ISS</CHUFANGRQ>
<YIYUANSFXMNM></YIYUANSFXMNM>
<SHOUFEIXMZXBM></SHOUFEIXMZXBM>
<YIYUANSFXMMC>急诊挂号</YIYUANSFXMMC>
<DANJIA></DANJIA>
<SHULIANG></SHULIANG>
</ITEM>
</ITEMS>
<HEJIJE></HEJIJE>
<GUAHAOFEI></GUAHAOFEI>
<ZHENLIAOFEI></ZHENLIAOFEI>
<JIUZHENLSH>GH1003403761</JIUZHENLSH>
<YILIAOLB></YILIAOLB>
<RUYUANNJBBM>Z00.</RUYUANNJBBM>
<RUYUANJBMC>健康查体</RUYUANJBMC>
<YISHENGDM>无</YISHENGDM>
<YISHENGXM>无</YISHENGXM>
<YIBAODJH></YIBAODJH>
<YIBAOZHSYBZ></YIBAOZHSYBZ>
<YIBAOZTJSBZ></YIBAOZTJSBZ>
</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; } }
}
前台转换代码:
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模型类的数据进行数组转换。
关于C#对Xml数据解析的更多相关文章
- iOS - XML 数据解析
前言 @interface NSXMLParser : NSObject public class NSXMLParser : NSObject 1.XML 数据 XML(Extensible Mar ...
- xml数据解析调研
XML数据解析http://www.tuicool.com/articles/Nraau2(必用) http://www.cnblogs.com/pengyingh/articles/2342699. ...
- iOS开发——网络Swift篇&JSON与XML数据解析
JSON与XML数据解析 JSON数据解析(内置NSJSONSerialization与第三方JSONKit) 一,使用自带的NSJSONSerialization 苹果从IOS5.0后推出了SD ...
- xml数据解析
xml数据解析 在iPhone开发中,XML的解析有很多选择,iOS SDK提供了NSXMLParser和libxml2两个类库,另外还有很多第三方类库可选,例如TBXML.TouchXML.Kiss ...
- iOS开发网络篇之Web Service和XML数据解析
郝萌主倾心贡献,尊重作者的劳动成果,请勿转载. 假设文章对您有所帮助,欢迎给作者捐赠,支持郝萌主.捐赠数额任意,重在心意^_^ 我要捐赠: 点击捐赠 Cocos2d-X源代码下载:点我传送 游戏官方下 ...
- 二、Android XML数据解析
XML,可扩展标记语言.可以用来存储数据,可以看做是一个小型的数据库,SharedPreference就是使用XML文件存储数据的,SQLite底层也是一个XML文件,而在网络应用方面,通常作为信息的 ...
- iOS-数据持久化基础-JSON与XML数据解析
解析的基本概念 所谓“解析”:从事先规定好的格式串中提取数据 解析的前提:提前约定好格式.数据提供方按照格式提供数据.数据获取方按照格式获取数据 iOS开发常见的解析:XML解析.JSON解析 一.X ...
- 玩转iOS开发 - JSON 和 Xml 数据解析
前言 Json 和xml是网络开发中经常使用的数据格式,JSON轻量级.xml相对较复杂.所以如今用JSON的比例很大.基本上从server获取的返回数据都是JSON格式的,作为iOS开发人员,解析J ...
- tcp接收xml数据解析
避免tcp接收xml数据时加上xml数据长度,根据xml数据特点来解析recv到的xml数据 int nPos1 = 0; int nPos2 = 0; int nTempPos = 0; int n ...
随机推荐
- SpringMVC中控制器接收JSP页面表单的参数接收方式详解及细节注意(400错误)
控制器方法中参数的接收 (1)以前的参数接收: String param = req.getParameter(name): (2)SpringMVC简化这个操作,只需要给控制器方法添加参数即可 a ...
- 深浅拷贝、集合set、函数、日志
#-----深浅拷贝---- import copy a = ["xiaoming",111,[5000,2000]] b = a print("b:%s" % ...
- c3p0参数
<c3p0-config> <default-config> <!--当连接池中的连接耗尽的时候c3p0一次同时获取的连接数.Default: 3 --> < ...
- django跨域问题解决
在django中,访问非同源网站(协议,域名,端口号)时,会出现: 解决方案: 1.安装 django-cors-headers pip install django-cors-headers 2.修 ...
- 【转】SkipList跳表基本原理
增加了向前指针的链表叫作跳表.跳表全称叫做跳跃表,简称跳表.跳表是一个随机化的数据结构,实质就是一种可以进行二分查找的有序链表.跳表在原有的有序链表上面增加了多级索引,通过索引来实现快速查找.跳表不仅 ...
- MYSQL:基于哈希的索引和基于树的索引有什么区别?
B+树是一个平衡的多叉树.B+树从根节点到叶子节点的搜索效率基本相当,不会出现大幅波动. 哈希索引采用一定的哈希算法,把键值换成新的哈希值,检索时不需要类似B+树那样从根节点逐级查找,只需一次哈希算法 ...
- PATA1001A+BFormat
这里学到的主要是将数字存储到数组中,倒序输出使用取余10加除10 while(sum) { num[len++] = sum % 10; sum /= 10; } 然后是每三位输出一个逗号,因为是倒序 ...
- 【BigData】Java基础_创建一个订单类
需求描述 定义一个类,描述订单信息订单id订单所属用户(用户对象)订单所包含的商品(不定数量个商品对象)订单总金额订单应付金额: 总金额500~1000,打折85折 总金额1000~150 ...
- sublime插件开发: 文件说明
sublime插件开发 文件 .sublime-settings 设置文件 Main.sublime-menu 主菜单按钮配置文件 Side Bar.sublime-menu 侧边栏菜单文件列表,选中 ...
- 灵魂拷问:Java对象的内存分配过程是如何保证线程安全的?(阿里面试)
JVM内存结构,是很重要的知识,相信每一个静心准备过面试的程序员都可以清楚的把堆.栈.方法区等介绍的比较清楚. 上图,是一张在作者根据<Java虚拟机规范(Java SE 8)>中描述的J ...