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>infozero@163.com</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

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏王磊的博客

带毫秒的字符转换成时间(DateTime)格式的通用方法

C#自身有更好的方式,Net任意String格式转换为DateTime类型 =========================================...

3116
来自专栏草根专栏

使用两种方法让 ASP.NET Core 实现遵循 HATEOAS 结构的 RESTful API

HATEOAS(Hypermedia as the engine of application state)是 REST 架构风格中最复杂的约束,也是构建成熟 ...

57911
来自专栏岑玉海

C#向excel中写入数据的三种方式

第一种:将DataGrid中的数据以流的形式写到excel中,格式以html的形式存在             Response.Clear();       ...

3204
来自专栏魏琼东

一步一步教你使用AgileEAS.NET基础类库进行应用开发-基础篇-使用UDA操纵SQL语句

       上一篇文章基于AgileEAS.NET平台基础类库进行应用开发-总体说明及数据定义中对本案例所涉及的数据表及部分数据,本文开始将从最基本的业务,数...

2115
来自专栏Kiba518

C#线程安全使用(四)

这是时隔多年第四篇,主要是因为身在东软受内网限制,好多文章就只好发到东软内部网站,懒的发到外面,现在一点点把在东软写的文章给转移出来。

873
来自专栏jessetalks

由浅入深表达式树(完结篇)重磅打造 Linq To 博客园

  一个多月之后,由浅入深表达式系列的最后一篇终于要问世了。想对所有关注的朋友说声:“对不起,我来晚了!” 希望最后一篇的内容对得起这一个月时间的等待。在学习完...

4496
来自专栏blackheart的专栏

[C#6] 8-异常增强

0. 目录 C#6 新增特性目录 1. 在catch和finally块中使用await 在C#5中引入一对关键字await/async,用来支持新的异步编程模型...

2035
来自专栏技术博客

C# XML与Json之间的相互转换

对于这转换其实很简单,其中最重要的就是先要引用类库。可以到官网进行下载引用http://json.codeplex.com。

5113
来自专栏GreenLeaves

控制反转和依赖注入模式

一、控制反转和依赖注入两者搭配能像反射工厂那样解决程序集之间的耦合问题,下面将从Asp.Net经典的三层模式多方位的讲解控制反转和依赖注入模式,是如何帮我们进行...

19210
来自专栏jessetalks

async & await 的前世今生(Updated)

async 和 await 出现在C# 5.0之后,给并行编程带来了不少的方便,特别是当在MVC中的Action也变成async之后,有点开始什么都是asyn...

35011

扫码关注云+社区

领取腾讯云代金券