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文件的主要内容,如果未能解决你的问题,请参考以下文章

在c#的winform 下怎么读取 xml文件中的数据?

c#中怎样读取xml文件中的数据,怎样动态将数据存储到xml文件中去?

如何在 C# 中读取和解析 XML 文件?

在c#中保存xml文件

在 C# 中浏览 XML 文件的最快方法是啥?

c#中如何按条件读出xml文件内容