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. LINUX下查看php运行的用户

    <?php echo shell_exec("id -a"); ?> 打开网页,显示 uid=2(daemon) gid=2(daemon) groups=2(daem ...

  2. 路由器之VPN应用与配置指南

    应用背景 近日,公司需要在外人员通过直接访问连接到公司内网,实现办公等一系列操作,这个时候就需要通过配置路由器VPN实现该需求了. 无线企业路由器可以帮助中小型企业搭建高性价比.稳定的企业办公网络,灵 ...

  3. php数组中删除元素之重新索引

    如果要在某个数组中删除一个元素,可以直接用的unset,但今天看到的东西却让我大吃一惊 <?php $arr = array('a','b','c','d'); unset($arr[1]); ...

  4. iOS开发中的那些小技巧

    前言:今天在写代码的过程中遇到一个需要修改系统navigationBar的背景色,我起初用的是barTintColor去修改但是防不住系统点击按钮的时候会有一个渲染高亮的效果,调了好久没有达到自己想要 ...

  5. php_1

    简介:(“PHP: Hypertext Preprocessor”,超文本预处理器的字母缩写)是一种被广泛应用的开放源代码的多用途脚本语言,它可嵌入到 HTML中,尤其适合 web 开发,语言的风格有 ...

  6. php面向对象的基础:创建OOP的方法

    方法的创建 class Computer{ public function _run(){ return '我是类的一个公共方法'; } } $computer = new Computer(); / ...

  7. webSphere中文日志乱码,设置日志编码方法

     1:管理控制台--->服务器--->应用程序服务器--->server1--->java和进程管理--->进程定义--->java虚拟机--->将通用jvm ...

  8. 重新审视事件对象event

    前言:之前在学习事件对象event时,一是一直在chrome浏览器(作为主运行环境)下运行调试自个儿程序,二是可能当时对事件对象理解不透彻才导致现在对事件对象的用法陷入了一个大坑,遂以此篇博客记之. ...

  9. sort()的多种用法

    sort()  方法用于对数组的元素进行排序. 一.默认情况 在默认情况下, sort() 方法按升序排列数组项.为了实现排序, sort() 方法会调用每个数组项的 toString() 转型方法, ...

  10. 济南学习 Day 3 T2 pm

    LYK 快跑!(run)Time Limit:5000ms Memory Limit:64MB题目描述LYK 陷进了一个迷宫! 这个迷宫是网格图形状的. LYK 一开始在(1,1)位置, 出口在(n, ...