http://blog.sina.com.cn/s/blog_6c762bb301010oi5.html

http://blog.xuite.net/cppbuilder/blog/9940157

在文件头先加入下面语句:

using System.Xml.Linq;

一、XML文件

假设XML文件内容如下:

<pitchers>
<pitcher>
<name>C Wang</name>
<wins></wins>
<team>NYY</team>
</pitcher>
<pitcher>
<name>R.Johnson</name>
<wins></wins>
<team>NYY</team>
</pitcher>
<pitcher>
<name>R.Halladay</name>
<wins></wins>
<team>TOR</team>
</pitcher>
</pitchers>

二、用C#生成上面的XML文件

XElement pitchers = new XElement("pitchers",
new XElement("pitcher",
new XElement("name", "C Wang"),
new XElement("wins", ),
new XElement("team", "NYY")
),
new XElement("pitcher",
new XElement("name", "R.Johnson"),
new XElement("wins", ),
new XElement("team", "NYY")
),
new XElement("pitcher",
new XElement("name", "R.Halladay"),
new XElement("wins", ),
new XElement("team", "TOR")
)
);
Console.WriteLine(pitchers);

三、新增

// 新增一筆資料至尾端
pitchers.Add(new XElement("pitcher",
new XElement("name", "J.Santana"),
new XElement("wins", ),
new XElement("team", "MIN")
)
);

增加结果 :J.Santana加在了最后面

四、删除元素

// 移除第一筆資料(C Wang將被移除)
pitchers.Element("pitcher").Remove();

执行Remove之后,结果如下:可以看到第一条被删除了。

五、修改元素

// 將目前第一筆資料(R.Johnson)的 name 內容改成 cppbuilder
pitchers.Element("pitcher").Element("name").SetValue("test");

替换结果如下:第一个name的内容提花为test了。

六、加入属性(Attributes)

XElement wang = new XElement("pitcher",
new XAttribute("throws", "Right"), // 加上 pitcher 的屬性 "右投"
new XElement("name", "C Wang"),
new XElement("wins", ),
new XElement("team", "NYY")); Console.WriteLine(wang);

结果如下:

修改屬性,用 SetAttributeValue ;

XElement wang = new XElement("pitcher", new XAttribute("throws", "Right"),
new XElement("name", "C Wang"),
new XElement("wins", ),
new XElement("team", "NYY"));
//add season attribute
wang.Element("wins").SetAttributeValue("season","");
Console.WriteLine(wang);

结果如下:

刪除屬性可以用 XAttribute 的 Remove 方法,或是用 SetAttributeValue 將屬性值設定為 null, 如下所示:

XElement wang = new XElement("pitcher", new XAttribute("throws", "Right"),
new XElement("name", "C Wang"),
new XElement("wins", ),
new XElement("team", "NYY"));
wang.Element("wins").SetAttributeValue("season","");
wang.Element("wins").SetAttributeValue("season",null);
Console.WriteLine(wang);

结果如下,可以看到season属性没有了。

五,取得属性值

XElement wang = new XElement("pitcher",
new XAttribute("throws", "Right"),
new XAttribute("bats", "Right"),
new XElement("name", "C Wang"),
new XElement("wins", ),
new XElement("team", "NYY"));
// 取得 throws 屬性的值
Console.WriteLine("Throws : " + wang.Attribute("throws").Value);

结果如下:

六、删除属性

// 移除throws屬性
wang.Attribute("throws").Remove();

七、加上Namespace

若要加上 Namespace ,可以寫在大括號內,並放到元素名稱之前,例如 <element xmlns="http://bcb.tw" /> 可寫成 "{http://bcb.tw}element" ,也可以用 XNamespace 類別,其用法類似 string,如下:

XElement wang = new XElement("{http://bcb.tw}pitcher",
new XElement("name", "C Wang"),
new XElement("wins", ),
new XElement("team", "NYY")
);
Console.WriteLine(wang); XNamespace ns = "http://bcb.tw"; // 注意這裡沒有使用 new, 而且不能改用 string
XElement santana = new XElement(ns + "pitcher",
new XElement("name", "J.Santana"),
new XElement("wins", ),
new XElement("team", "MIN")
);
Console.WriteLine(santana);

八、為屬性加上 Namespace

要讓屬性名稱也加上 Namespace ,例如 xmlns:p ,將屬性名稱寫成 "xmlns:p" 是錯誤的,必須用 XNamespace + "p"

X
Namespace ns = "http://bcb.tw";
XElement wang = new XElement(ns + "pitcher",
new XAttribute(XNamespace.Xmlns + "throws", "Right"), // 不可寫成 new XElement("xmlns:throws", "Right"),
new XElement("name", "C Wang"),
new XElement("wins", ,
new XAttribute(XNamespace.Xmlns + "season", "")),
new XElement("team", "NYY")
);
Console.WriteLine(wang);

九、装载某个XML文件

使用 XDocument 的 Load 方法可以讀入 XML 檔案,Save 可以儲存至 XML 檔案,注意 Load 是 static。"pitchers.xml" 內容同上。下面的示例是取出name元素内容:

XDocument xmlDoc = XDocument.Load("pitchers.xml");
XElement pitchers = xmlDoc.Root;
foreach (XElement p in pitchers.Elements())
Console.WriteLine(p.Element("name").Value);

如果上面這範例改用列舉 Node ,有什麼差別呢?

Element 指的是一個元素,必須有標籤框住的才算元素,而節點則是會包含標籤外的文字。请看下面示例。

十、元素和节点的差异

用同一元素来列巨额他的所有子元素和子节点,观察有何异同:

XElement cppbuilder = XElement.Parse(
@"<contact>test content many contents so many contents
<id>cppbuilder</id>
<blogUrl>http://bcb.tw/blog</blogUrl>
<email provider='x'>x@bcb.tw</email>
<email provider='yahoo'>iapx_432@yahoo.com.tw</email>
</contact>");
Console.WriteLine("------ List Elements");
foreach (var c in cppbuilder.Elements())
Console.WriteLine(c);
Console.WriteLine("------ List Nodes");
foreach (var c in cppbuilder.Nodes())
Console.WriteLine(c);

以上方法,只是增加了 XML 檔的存取便利性,如果要從一堆資料理篩選出想要的資料,用 Linq 是最快的了。

我们讲了XML to Linq的基本操作,现在我们讲到如何用Linq来操作XML。

首先建立一个class,用来记录球员姓名,胜利的次数,所属球队,如下:

class Pitcher
{
public string Name;
public int Wins;
public string Team;
}

接着我们建立一个数组,如下:

var pitchers = new [] {
new Pitcher{
Name = "C Wang",
Wins = ,
Team = "NYY"},
new Pitcher{
Name = "R.Johnson",
Wins = ,
Team = "NYY"},
new Pitcher{
Name = "R.Halladay",
Wins = ,
Team = "TOR"}
};

一、取得某个球队的所有球员资料:

XElement pitchersXml = new XElement("pitchers",
from p in pitchers
where p.Team == "NYY"
select new XElement("pitcher",
new XElement("name", p.Name),
new XElement("wins", p.Wins),
new XElement("team", p.Team)
)
);
Console.WriteLine(pitchersXml);

執行結果

<pitchers>
<pitcher>
<name>C Wang</name>
<wins></wins>
<team>NYY</team>
</pitcher>
<pitcher>
<name>R.Johnson</name>
<wins></wins>
<team>NYY</team>
</pitcher>
</pitchers>

二、从一个XML文件中取得胜利次数大于17的球员姓名

XDocument xmlDoc = XDocument.Load("pitchers.xml");
XElement pitchers = xmlDoc.Root;
XElement wins17 = new XElement("wins17",
from p in pitchers.Elements("pitcher")
where int.Parse((string)p.Element("wins")) >=
select new object[] {
new XElement("name", (string)p.Element("name"))
});
Console.WriteLine(wins17);

執行結果

<wins17>
<name>C Wang</name>
<name>R.Johnson</name>
</wins17>

三、取得所有球员资料,胜利次数少得排在前面,并修改显示方式:

XDocument xmlDoc = XDocument.Load("pitchers.xml");
XElement pitchers = xmlDoc.Root;
XElement wins17 = new XElement("wins17",
from p in pitchers.Elements("pitcher")
orderby int.Parse((string)p.Element("wins"))
select new object[] {
new XElement("pitcher",
(string)p.Element("name"),
new XAttribute("wins", (string)p.Element("wins"))
)
});
Console.WriteLine(wins17);

结果

<wins17>
<pitcher wins="">R.Halladay</pitcher>
<pitcher wins="">R.Johnson</pitcher>
<pitcher wins="">C Wang</pitcher>
</wins17>

[C#]Linq To Xml 实例操作- 转的更多相关文章

  1. C#操作Xml:linq to xml操作XML

    LINQ to XML提供了更方便的读写xml方式.前几篇文章的评论中总有朋友提,你为啥不用linq to xml?现在到时候了,linq to xml出场了. .Net中的System.Xml.Li ...

  2. linq to xml操作XML(转)

    转自:http://www.cnblogs.com/yukaizhao/archive/2011/07/21/linq-to-xml.html LINQ to XML提供了更方便的读写xml方式.前几 ...

  3. Linq To Xml操作XML增删改查

    对XML文件的操作在平时项目中经常要运用到,比如用于存放一些配置相关的内容:本文将简单运用Linq TO Xml对XML进行操作,主要讲解对XML的创建.加载.增加.查询.修改以及删除:重点在于类XD ...

  4. 4.Linq To Xml操作XML增删改查

    转自https://www.cnblogs.com/wujy/p/3366812.html 对XML文件的操作在平时项目中经常要运用到,比如用于存放一些配置相关的内容:本文将简单运用Linq TO X ...

  5. LINQ系列:LINQ to XML操作

    LINQ to XML操作XML文件的方法,如创建XML文件.添加新的元素到XML文件中.修改XML文件中的元素.删除XML文件中的元素等. 1. 创建XML文件 string xmlFilePath ...

  6. Linq对XML的简单操作

    前两章介绍了关于Linq创建.解析SOAP格式的XML,在实际运用中,可能会对xml进行一些其它的操作,比如基础的增删该查,而操作对象首先需要获取对象,针对于DOM操作来说,Linq确实方便了不少,如 ...

  7. Linq学习笔记---Linq to Xml操作

    LINQ to XML的成员, 属性列表: 属性 说明 Document 获取此 XObject 的 XDocument  EmptySequence  获取空的元素集合  FirstAttribut ...

  8. Linq to XML操作XML文件

    LINQ的类型 在MSDN官方文件中,LINQ分为几种类型: . LINQ to Objects(或称LINQ to Collection),这是LINQ的基本功能,针对集合对象进行查询处理,包括基本 ...

  9. c#操作xml文件(XmlDocument,XmlTextReader,Linq To Xml)

    主界面

随机推荐

  1. HDU4277 USACO ORZ(dfs+set)

    Problem Description Like everyone, cows enjoy variety. Their current fancy is new shapes for pasture ...

  2. 配置SQL Server 2008 R2 Reporting Services

    记录如何在本地配置SQL Server 2008 R2 Reporting Services,笔者环境为Windows 7 64位 + SQL Server 2008 R2 一.准备工作 其实准备工作 ...

  3. Java之累加和

    所谓累加算法,就是数学中数列求的算法,这都是司空见惯了的.下面我们用java求: package com.cdp.leijiahe; import java.util.Scanner; public ...

  4. 原生js学习笔记2

    知识点: 1:关于this指向问题,如果有函数a(),直接a()那么this指向window,new a()指向函数本身. 2:关于null和undefined.两者如果用“==”则认为两者是相等的, ...

  5. asp.net运算符之逻辑运算符以及其他运算符

    逻辑(布尔型)运算符用于对boolean型的结果的表达式进行运算,运算的结果都是boolean型.其运算结果如下所示: 运算符 运算 例子 结果 & AND(与) false&true ...

  6. 集合框架学习之排序Comparable&Comoarator

    1.内置引用数据类型比较(常用) 1.1  Comparable 1.整数.小数Integer Float Double 直接比较基本数据类型的大小 2.字符:比较的Unicode码只差 3.字符串: ...

  7. Linux platform设备简介

    Technorati 标签: Linux platform     Linux在2.6内核中,针对一系列设备驱动,提供新的管理框架,成为platform机制,推出的目的,在于隔离驱动的资源和实现,使得 ...

  8. ubuntu 常用参数设置

        在Linux下,对于参数的设置,一般来说,都遵循这个规律.每一个功能程序,一定对于一个对于名字的配置文件.     涉及到多用户的功能配置,一定有一个全局的配置文件,对所有用户都生效,而每个用 ...

  9. 枪击手机屏幕应用android源码

    这款是作者最新的一款应用源码,枪击手机屏幕应用源码,该应用源码比较完整的,应用目前已经上线了一些应用商店了,大家想更深入的了解,可以到一些应用商店下载吧,直接搜索相关的关键字就可以搜到了,或者在下面有 ...

  10. DOS命令之----Netstat+Task以及相关使用

    作为一个初步接触电脑的人,在学习Android的过程中,遇到各种问题,今天遇到了.这样一个错误提示: The connection to adb is down, and a severe error ...