Linq to XML 读取XML 备忘笔记

本文转载:http://www.cnblogs.com/infozero/archive/2010/07/13/1776383.html

Linq to XML 读取XML 备忘笔记

最近一个项目中有要用到 xml 读取,我首先想到的是使用 Linq 读取(XML 解析感觉有点麻烦),项目完成,现抽取其内容,作如下笔记备忘.

1. demo.xml

复制代码
demo.xml
<? xml version="1.0" encoding="utf-8"  ?>
< note >
  
< conf >
    
< to > infozero </ to >
    
< from > lerroy </ from >
    
< heading > 测试信息 </ heading >
    
< body > 第一条测试信息 </ body >
    
< title  name ="我的第一条消息" > from myself </ title >
  
</ conf >
  
< conf >
    
< to > [email protected] </ to >
    
< from > text </ from >
    
< heading >  时刻提醒我  </ heading >
    
< body > 这是一条测试信息! </ body >
    
< title  name ="我的第二条消息" > from others </ title >
  
</ conf >
</ note >
复制代码

2.在 程序中引用以下命名空间:

using  System;
using  System.Linq;
using  System.Xml.Linq;

3.读取方法如下:


复制代码
main 函数入口
     class  Program
    {
        
static   void  Main( string [] args)
        {
            XDocument doc 
=  XDocument.Load( " demo.xml " );
            var text 
=  from t  in  doc.Descendants( " conf " )                   //定位到节点 (XML字符串中一定要有root根节点,否者读取不到。)
                       .Where(w  =>  w.Element( " to " ).Value.Contains( ' @ ' ))    // 若要筛选就用上这个语句 
                       select  new
                       {
                           to 
=  t.Element( " to " ).Value,
                           froms 
=  t.Element( " from " ).Value,
                           head 
=  t.Element( " heading " ).Value,
                           body 
=  t.Element( " body " ).Value,
                           title 
=  t.Element( " title " ).Attribute( " name " ).Value    // 注意此处用到 attribute 
                       };
            
foreach  (var a  in  text)
            {
                Console.WriteLine(a.to);
                Console.WriteLine(a.froms);
                Console.WriteLine(a.head);
                Console.WriteLine(a.body);
                Console.WriteLine(a.title);
            }
            Console.ReadKey();
        }
    }
复制代码

 

结果:

 

小结: Linq to Xml 确实是个好东西 ,它极大地方便了我们的编程。

Linq to XML读取xml的方法

添加应用:using System.Xml.Linq;

读取xml最重要的要知道xml是那种写法,因为linq已经把读取方式封装的相对傻瓜了,要有问题一定xml的结构问题。

第一种写法:

<?xml version="1.0" encoding="utf-8" ?>

<feeds>

  <feed>

    <image>ddddddddd</image>

    <link>fffffffff</link>

    <title>ddddddddddddddddd</title>

  </feed>

</feeds>

Linq语句:

 

 XDocument xdoc= XDocument.Load(Server.MapPath("xxx.xml"));

                var ad = from a in xdoc.Descendants("feed")

                        select new  

                         {

                            image = a.Element("image").Value, 

                             link = a.Element("link").Value,

                             title = a.Element("title").Value 

                         };

                foreach (var a in ad)

                    Response.Write(a.image);

第二种xml

 

<?xml version="1.0" encoding="utf-8" ?>

<BizADsList>

  <adData aid="1" image="815.jpg" link="http://www.dizhitiao.com" title="测试1"/>

  <adData aid="2" image="5815.jpg" link="http://www.dizhitiao.com" title="测试2"/>  // BizADsList节点元素下多个相同的adData节点元素

</BizADsList>

Linq语句:

 

 XDocument adList = XDocument.Load(Server.MapPath("Data.xml"));

                var ad = from a in adList.Descendants("BizADsList").Elements("adData")

                         select new  

                         {

                             image = a.Attribute("image").Value,

                             link = a.Attribute("link").Value,

                             title = a.Attribute("title").Value 

                         };

                string s = "";

                foreach (var a in ad)

                    s += a.image;

别告诉我没看出区别来。总之一句话,对xml要先多些了解。


---------- 后续补充:-----

另外一种 XML 格式 的解析参见:  http://www.cnblogs.com/portalsky/archive/2008/09/11/1289461.html 
XML 增删改查: http://www.cnblogs.com/greatverve/archive/2010/07/13/linq-to-xml-one-begin.html

你可能感兴趣的:(读取xml)