c#中xml文件
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了c#中xml文件相关的知识,希望对你有一定的参考价值。
c#中xml 这个东西我没用过,可能所写的代码是简单的吧。现在我想知道这个东西到底能起到什么作用,用它到底有什么好处?请帮我罗列一下,我好决定是否学它。
他是 有结构的数据文件,是文本文件结构化的产物。功能和数据库类似。提供简单的数据存储,查询,添加,修改等功能。是一个高深的东西。不过一般没必要学得太深。我现在只会用DataSet操作XML,不过这个很方便,而且很简单。 参考技术A C#编程肯定要用到XML文件的,大多数作为应用程序的配置文件,有时候它可以做数据源使用.如果你想知道XML文件到底是什么样的,你可以看一下任一得网页源代码,格式基本一样,只是"<>"里的内容更随意一点罢了
(html是XML的一种) 参考技术B 可以把XML文件 放到 集合中。放到任意你想放的控件里,如:TreeView,ListView等。 这个很简单,和记事本差不多,只不过区别的是格式。这个不用学,做两个练习就会了。
不管有没有好处,这个也不是很难,建议学一下吧,以后去工作单位面试时:你说你会XML,会有好多好外的。 参考技术C 无法理解你所说的C#中xml是什么意思,请先理解C#跟xml是两个东西,C#中没有xml这个东西,只有对其进行操作的库之类的 参考技术D 很关键的一个作用就是用于不同系统间(不同数据库平台、结构的多个系统)的数据接口、Web服务、集成中使用。
具体,请看如下文章
1、数据交换
用XML在应用程序和公司之间作数据交换已不是什么秘密了,毫无疑问应被列为第一位。
那么为什么XML在这个领域里的地位这么重要呢?原因就是XML使用元素和属性来描述数
据。在数据传送过程中,XML始终保留了诸如父/子关系这样的数据结构。几个应用程序
可以共享和解析同一个XML文件,不必使用传统的字符串解析或拆解过程。
相反,普通文件不对每个数据段做描述(除了在头文件中),也不保留数据关系结构。使
用XML做数据交换可以使应用程序更具有弹性,因为可以用位置(与普通文件一样)或用元
素名(从数据库)来存取XML数据。
2、Web服务
Web服务是最令人激动的革命之一,它让使用不同系统和不同编程语言的人们能够相互交
流和分享数据。其基础在于Web服务器用XML在系统之间交换数据。交换数据通常用XML标
记,能使协议取得规范一致,比如在简单对象处理协议(Simple Object Access Protoc
ol, SOAP)平台上。
SOAP可以在用不同编程语言构造的对象之间传递消息。这意味着一个C#对象能够与一个
Java对象进行通讯。这种通讯甚至可以发生在运行于不同操作系统上的对象之间。DCOM
, CORBA或Java RMI只能在紧密耦合的对象之间传递消息,SOAP则可在松耦合对象之间传
递消息。
3、内容管理
XML只用元素和属性来描述数据,而不提供数据的显示方法。这样,XML就提供了一个优
秀的方法来标记独立于平台和语言的内容。
使用象XSLT这样的语言能够轻易地将XML文件转换成各种格式文件,比如HTML, WML, PD
F, flat file, EDI, 等等。XML具有的能够运行于不同系统平台之间和转换成不同格式
目标文件的能力使得它成为内容管理应用系统中的优秀选择。
4、Web集成
现在有越来越多的设备也支持XML了。使得Web开发商可以在个人电子助理和浏览器之间
用XML来传递数据。
为什么将XML文本直接送进这样的设备去呢?这样作的目的是让用户更多地自己掌握数据
显示方式,更能体验到实践的快乐。常规的客户/服务(C/S)方式为了获得数据排序或更
换显示格式,必须向服务器发出申请;而XML则可以直接处理数据,不必经过向服务器申
请查询-返回结果这样的双向“旅程”,同时在设备也不需要配制数据库。
甚至还可以对设备上的XML文件进行修改并将结果返回给服务器。想像一下,一台具有互
联网功能并支持XML的电冰箱将会给市场带来多么大的冲击吧。你从此不必早起去取牛奶
了!
5、配制
许多应用都将配制数据存储在各种文件里,比如.INI文件。虽然这样的文件格式已经使
用多年并一直很好用,但是XML还是以更为优秀的方式为应用程序标记配制数据。使用.
NET里的类,如XmlDocument和XmlTextReader,将配制数据标记为XML格式,能使其更具
可读性,并能方便地集成到应用系统中去。使用XML配制文件的应用程序能够方便地处理
所需数据,不用象其他应用那样要经过重新编译才能修改和维护应用系统。
如前所述,这里提到的五种使用XML的途径不包括全部场合。本回答被提问者采纳
使用 C# 在 XML 文件中选择节点属性
【中文标题】使用 C# 在 XML 文件中选择节点属性【英文标题】:Select nodes attribute in XML file using C# 【发布时间】:2014-02-12 10:07:34 【问题描述】:在以下 XML 文件中,我尝试将所有 id 属性保存在一个列表中:
<?xml version="1.0"?>
<PressReleases>
<PressRelease id="545" version="1">
<Name>Convert number to string</Name>
<Date>20/05/1985</Date>
<Input>1</Input>
<Output>One</Output>
</PressRelease>
<PressRelease id="544" version="1">
<Name>Find succeeding characters</Name>
<Date>19/05/1985</Date>
<Input>abc</Input>
<Output>def</Output>
</PressRelease>
<PressRelease id="543" version="1">
<Name>Convert multiple numbers to strings</Name>
<Date>17/05/1985</Date>
<Input>123</Input>
<Output>One Two Three</Output>
</PressRelease>
<PressRelease id="542" version="1">
<Name>Find correlated key</Name>
<Date>02/05/1985</Date>
<Input>a1</Input>
<Output>b1</Output>
</PressRelease>
<PressRelease id="541" version="1">
<Name>Count characters</Name>
<Date>04/02/1985</Date>
<Input>This is a test</Input>
<Output>14</Output>
</PressRelease>
<PressRelease id="540" version="1">
<Name>Another Test</Name>
<Date>09/01/1985</Date>
<Input>Test Input</Input>
<Output>10</Output>
</PressRelease>
</PressReleases>
此代码块仅保存在第一个 Press Release 节点 (545) 中写入的第一个 Id。 我需要所有这些(545,544 等)
XmlDocument doc = new XmlDocument();
doc.Load(@"C:\Users\ARNAUDR\Desktop\test.xml");
//string xmlcontents = doc.InnerXml;
XmlNodeList xnList = doc.SelectNodes("/PressReleases");
List<int> IDsInDistantXML = new List<int>();
foreach (XmlNode xn in xnList)
XmlNode PressRelease = xn.SelectSingleNode("PressRelease");
if (PressRelease != null)
IDsInDistantXML.Add(Convert.ToInt16(PressRelease.Attributes["id"].Value));
提前感谢您的帮助
【问题讨论】:
【参考方案1】:我建议你使用 Linq to Xml:
XDocument xdoc = XDocument.Load(@"C:\Users\ARNAUDR\Desktop\test.xml");
List<int> ids = xdoc.Root.Elements("PressRelease")
.Select(pr => (int)pr.Attribute("id"))
.ToList();
注意:您的问题是您始终从根中选择第一个(单个节点) PressRelease 节点,并且您正在枚举根节点(始终为一个)而不是枚举 PressRelease 节点。这是固定的解决方案:
XmlNodeList pressReleases = doc.SelectNodes("/PressReleases/PressRelease");
List<int> IDsInDistantXML = new List<int>();
foreach (XmlNode pr in pressReleases)
IDsInDistantXML.Add(Convert.ToInt32(pr.Attributes["id"].Value));
【讨论】:
+1 用于实际指出问题。如果他将第一个 XPath 表达式调整为/PressReleases/PressRelease
,然后对结果进行迭代,他可以达到相同的效果。但是使用 LINQ to XML 更优雅。
@Dirk 谢谢 :) 已经发布了带有正确 XPath 选择器的固定解决方案【参考方案2】:
或者,如果您只需要一个属性,请将您的 SelectNodes
xpath 直接更改为节点:
List<int> IDsInDistantXML = new List<int>();
foreach (var xn in doc.SelectNodes("/PressReleases/PressRelease"))
IDsInDistantXML.Add(Convert.ToInt16(xn.Attributes["id"].Value));
【讨论】:
以上是关于c#中xml文件的主要内容,如果未能解决你的问题,请参考以下文章