c#中如何使用linq to xml访问xml文件

来源:互联网  作者:且听风吟
摘要:使用linqtoxml可以很方便的实现对xml文件的访问,在网上看到的写的这方面的帖子都稍微有一些混乱。今天博客园主页上转过来的那篇文章写的也比较不清楚,下面把我在平常中使用linqtoxml访问文件的方式写下来,供没有写过的兄弟参考:…

使用linq to xml可以很方便的实现对xml文件的访问,在网上看到的写的这方面的帖子都稍微有一些混乱。今天博客园主页上转过来的那篇文章写的也比较不清楚,下面把我在平常中使用linq to xml访问文件的方式写下来,供没有写过的兄弟参考:

首先第一步是选中要访问xml文件的属性copy to out(如test.xml),选择always,这步的意思是这个xml文件始终会被输出到可执行文件所在的文件夹,这样我们才可以直接使用不带路径的文件名来访问它。下面来看这个xml文件的内容:

<?xml version="1.0" encoding="utf-8" ?>
<Root>
  <!--第一种xml的格式-->
  <FirstStyle>
  <Test>one</Test>
  <Test>two</Test>
  <Test>three</Test>
  </FirstStyle>
 
  <!--第二种xml格式,配置文件中常用的格式-->
  <SecondStyle>
  <Test_ name="firstname" value="xu"/>
  <Test_ name="lastname" value="jin"/>
  <Test_ name="lastname" value="lin"/>
  </SecondStyle>

<!--第三种xml格式,搭配前两种-->

<ThirdSytle>
  <Test1 name="test1">test1_value</Test1>
  </ThirdSytle>
</Root>

<Root></Root>只是表明xml的根节点,<FirstSytle></FirstStyle>定义第一种格式,可以无限嵌套节点,<Test>是<FirstStyle>的一个多值嵌套子节点,节点中已经赋了三个“值”:one two three ,在后面的代码中,将说明怎么读取这几个值。<SecondStyle> 定义第二种格式,<Test_>节点中没有“值”,但是却增加了“属性”name 和 value ,属性的名字可以自定义。我们在后面也会说明如何读取这些属性里面的值。这两种方式可以配合使用,就是xml中的第三种模式,不做另外的说明,在下面的访问代码中也没有做访问实例,可以参考前两种自己组合,下面来看代码:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Xml;
using System.Xml.Linq;

namespace LinqXml
{
  class Program
  {
    static void Main(string[] args)
    {
      //第一种xml格式的读法
      var firstCollection = from test in XElement.Load("test.xml").Element("FirstStyle").Elements("Test")
                select test.Value;
      foreach (string s in firstCollection)
      {
        Console.WriteLine(s);
      }

//第二种xml格式的读法
      var secondCollection = from test in XElement.Load("test.xml").Element("SecondStyle").Elements("Test_")
                 where test.Attribute("name").Value.Equals("lastname")
                 select test.Attribute("value").Value;
      foreach (string s in secondCollection)
      {
        Console.WriteLine(s);
      }
    }
  }
}

在进行xml节点选择的时候,自外而内,跟节点不用选,使用节点名称选择。如果该节点是单节点(如几种Style的节点),则应该用Element("")来选择,如果是多节点(如<Test>),则必须使用Elements("")来选择,如果选用Element(""),则只会返回该类节点的第一个。linq 语法稍微解释一下,from制定选择的范围,where指定选择的条件,selete 指定选择的目标。如果不明白可以把代码实践一下调试看看,有不同想法的兄弟联系我吧: zhaotiantang520@live.cn.

【相关文章】好搜一下
使用Visual Studio 2010空白解决方案的三个理由

使用Visual Studio 2010空白

在Visual Studio 2010(包括以前的版本中)都提供了很多现成的解决…