前言:xml的操作方式有多种,但要论使用频繁程度,博主用得最多的还是Linq to xml的方式,觉得它使用起来很方便,就用那么几个方法就能完成简单xml的读写。之前做的一个项目有一个很变态的需求:C#项目调用不知道是什么语言写的一个WebService,然后添加服务引用总是失败,通过代理的方式动态调用也总是报错,最后没办法,通过发送原始的WebRequest请求直接得到对方返回的一个xml文件。注意过webservice的wsdl文件的朋友应该知道这个是系统生成的xml文件,有点复杂,研究了半天终于能正常读写了。今天在这里和大家分享下。
1、介绍之前,首先回顾下Linq to xml的方式读写简单xml的方法
(1)读取xml
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 |
|
(2)写xml
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 |
|
通过XDocument、XElement对象和Element()、Elements()两个方法能完成大部分xml文件的操作。
2、进入今天的正题:读写带命名空间的xml文件。
首先来看一段xml
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
|
第一次看到这个文件确实让人萌神了,比如需要取一个msdata:IsDataSet=”true”这个属性,该怎么取…
解析之前,先来分析下这段xml,
先来看看解析的代码:
1 2 3 4 5 6 7 8 9 10 11 12 |
|
我们来解析下几个关键的地方:
(1)我们来解析下
1 |
|
这一句,最前面的”xs”表示标签所属命名空间的变量,xmlns:xs=”http://www.w3.org/2001/XMLSchema”这个表示xs这个命名空间的值。所以要得到schema这个标签需要带上命名空间var oSchema = oDataSet.Element(XName.Get(“schema”, “http://www.w3.org/2001/XMLSchema”));这个标签还定义了另一个命名空间xmlns:msdata=”urn:schemas-microsoft-com:xml-msdata”。
(2)再来看看aa标签
1 2 3 |
|
msdata就是上面schema标签里面定义的另一个命名空间,表示aa标签属于msdata命名空间下面。
(3)再看来看属性的取法:
1 |
|
如果要取msdata:IsDataSet=”true”,由于这个属性也带有命名空间,所以取属性时也要加上命名空间了。所以需要这样取。
1 |
|
现在大伙们应该对这种xml有一个更加清晰的认识了吧。其实一般情况下这种场景比较少见,因为这么复杂的xml一般是由引用服务时代理对象去解析的。但如果真的有这么变态的需求我们也不用担心了。在此记录下,以后如果大家遇到希望能节约大伙的时间。
以上就是C#基础系列:Linq to Xml读写xml的内容,更多相关内容请关注PHP中文网(www.php.cn)!