且听风吟

疯狂的IT菜鸟巢

博客园 首页 联系 订阅 管理

     使用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.

 

 

posted on 2009-04-21 18:49  微风吟  阅读(1782)  评论(0编辑  收藏  举报