好学IT学院:IT信息技术分享交流平台
标签:C#  来源:互联网  作者:且听风吟  发布时间:2009-07-06  ★★★加入收藏〗〖手机版
摘要:使用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.

利用 C# 实现任务栏通知窗口
  想必大部分网友都使用过QQ、MSN等聊天程序,它们的界面都相当华丽,尤其是当网友上线以及消息提示时会有一个浮动的窗体从屏幕的右下方…
  • 好学考试H5触屏版开放内测
  • 好学触屏公众号虎力全开、杨帆起航!