一、LINQ to XML常用成员

  LINQ to XML的成员,

  属性列表:

属性 说明
Document 获取此 XObject 的 XDocument
 EmptySequence  获取空的元素集合
 FirstAttribute  获取此元素的第一个属性
 FirstNode  获取此节点的第一个子节点
 HasAttributes  获取一个值,该值指示此元素是否至少具有一个属性
 HasElements  获取一个值,该值指示此元素是否至少具有一个子元素
 IsEmpty  获取一个值,该值指示此元素是否不包含内容
 LastAttribute  获取此元素的最后一个属性
 LastNode  获取此节点的最后一个子节点
 Name  获取或设置此元素的名称
 NextNode  获取此节点的下一个同级节点
 NodeType  获取此节点的节点类型
 Parent  获取此 XObject 的父级 XElement
 PreviousNode  获取此节点的上一个同级节点
 Value  获取或设置此元素的串连文本内容

  方法列表:

方法 说明
Add 将指定的内容添加为此 XContainer 的子级
AddAfterSelf 紧跟在此节点之后添加指定的内容
AddAnnotation 将对象添加到此 XObject 的批注列表
AddBeforeSelf  紧邻此节点之前添加指定的内容
AddFirst 将指定的内容作为此文档或元素的第一个子级添加
Ancestors 返回此节点的上级元素的集合
AncestorsAndSelf 返回元素集合,其中包含此元素及其上级
Annotation 从此 XObject 获取指定类型的第一个批注对象
Annotations 获取此 XObject 的指定类型的批注集合
Attribute 返回具有指定 XName 的此 XElement 的 XAttribute
Attributes 返回此元素的属性集合
CreateReader 使用 readerOptions 参数指定的选项创建 XmlReader
CreateWriter 创建可用于将节点添加至 XContainer 的 XmlWriter
DescendantNodes 按文档顺序返回此文档或元素的子代节点集合
DescendantNodesAndSelf 返回节点的集合,而这些节点包含此元素以及此元素的所有子代节点,并将它们按文档顺序排列
Descendants 按文档顺序返回此文档或元素的子代元素集合
DescendantsAndSelf 返回元素的集合,而这些元素包含此元素以及此元素的所有子代元素,并按文档顺序排列它们
Elements 按文档顺序返回此元素或文档的经过筛选的子元素集合
ElementsAfterSelf  按文档顺序返回此节点后的同级元素集合
ElementsBeforeSelf  按文档顺序返回此节点前的同级元素集合
GetDefaultNamespace  获取此 XElement 的默认 XNamespace
GetNamespaceOfPrefix 获取此 XElement 的与特定前缀关联的命名空间
GetPrefixOfNamespace 获取与此 XElement 的命名空间关联的前缀
IsAfter  确定当前节点是否按文档顺序显示在指定节点之后
IsBefore 确定当前节点是否按文档顺序显示在指定节点之前
Load 从文件路径、TextReader、XmlReader、Stream中加载Xml数据
Nodes 按文档顺序返回此元素或文档的子节点集合
NodesAfterSelf 按文档顺序返回此节点后的同级节点的集合
NodesBeforeSelf 按文档顺序返回此节点前的同级节点的集合
Parse 从包含 XML 的字符串加载 XElement
Remove 从节点父级中删除此节点
RemoveAll 从此 XElement 中移除节点和属性
RemoveAnnotations 从此 XObject 移除指定类型的批注 
RemoveAttributes 移除此 XElement 的属性
RemoveNodes 从此文档或元素中移除子节点
ReplaceAll 使用指定的内容替换此元素的子节点和属性
ReplaceAttributes 使用指定的内容替换此元素的属性
ReplaceNodes 使用指定的内容替换此文档或元素的子节点
ReplaceWith 使用指定的内容替换此节点
Save 将此元素序列化为文件、XmlWriter、TextWriter、Stream
SetAttributeValue 设置属性的值、添加属性或移除属性
SetElementValue 设置子元素的值、添加子元素或移除子元素
SetValue 设置此元素的值
WriteTo 将此元素写入 XmlWriter

二、LINQ to XML各种类的基本操作

  1、创建XML元素

  LINQ to XML使用XElement类创建XML元素。

  先来看一个最基本的示例:

    class Program
{
static void Main(string[] args)
{
XElement xml =
new XElement("Persons",
new XElement("Person",
new XElement("Name", "刘备"),
new XElement("Age", "")
),
new XElement("Person",
new XElement("Name", "关羽"),
new XElement("Age", "")
)
);
xml.Save(@"D:\123.xml"); Console.ReadKey();
}
}

  以上代码生成的XML文件代码如下:

<?xml version="1.0" encoding="utf-8"?>
<Persons>
<Person>
<Name>刘备</Name>
<Age>28</Age>
</Person>
<Person>
<Name>关羽</Name>
<Age>27</Age>
</Person>
</Persons>

  非常简单的,下面给出一个非常全面的示例,包括XML大部分的节点类型。

    class Program
{
static void Main(string[] args)
{
//创建处理指令
XProcessingInstruction instruction = new XProcessingInstruction("xml-stylesheet","href=\"hello.css\" type = \"text/css\"");
//创建声明对象
XDeclaration xDeclaration = new XDeclaration("1.0","GB2312","yes");
//创建文档类型
XDocumentType documentType = new XDocumentType("Person", null, "Person.dtd", null);
//创建XmlCData数据
XCData data = new XCData("<h1>神奇的刘备</h1>");
//创建XDocument文档
XDocument xDoc = new XDocument();
XElement xml =
new XElement("Persons",
new XElement("Person",
new XAttribute("Description", "此人龙凤之姿 天日之表;"),
new XElement("Name", data),
new XElement("Age", "")
),
new XElement("Person",
new XElement("Name", "关羽"),
new XElement("Age", "")
)
);
xDoc.Add(documentType);
xDoc.Add(instruction);
xDoc.Declaration = xDeclaration;
xDoc.Add(xml); xDoc.Save(@"D:\123.xml"); Console.ReadKey();
}
}

  以上代码输出XML如下:

<?xml version="1.0" encoding="gb2312" standalone="yes"?>
<!DOCTYPE Person SYSTEM "Person.dtd">
<?xml-stylesheet href="hello.css" type = "text/css"?>
<Persons>
<Person Description="此人龙凤之姿 天日之表;">
<Name><![CDATA[<h1>神奇的刘备</h1>]]></Name>
<Age>28</Age>
</Person>
<Person>
<Name>关羽</Name>
<Age>27</Age>
</Person>
</Persons>

  好用又简单。

三、XML数据的输出

  XElement有个Save,这个Save非常强大,有多种重载,支持将XML数据输入到各处(文件地址,流,TextWriter,XmlWriter)。

    class Program
{
static void Main(string[] args)
{
XElement xml =
new XElement("Persons",
new XElement("Person",
new XElement("Name", "刘备"),
new XElement("Age", "")
)
);
//输出到文件
xml.Save(@"D:\123.xml");
//输出到TextWriter
TextWriter tw = new StringWriter();
//第二个参数SaveOptions枚举支持设置格式,缩进,保留无关重要的空白,去除重复命名空间
xml.Save(tw, SaveOptions.None);
Console.WriteLine(tw);
//输出到Stream
using (MemoryStream mem = new MemoryStream())
{
xml.Save(mem);
Console.WriteLine(Encoding.UTF8.GetString(mem.ToArray()));
}
//输出到XmlWriter
XmlWriter xw = XmlWriter.Create(@"D:\LinqToXml.xml"); xml.Save(xw);
xw.Flush();
Console.ReadKey();
}
}

  一个DEMO完成输出到4个位置,不错。

四、XML数据的输入

  1、从文件中输入XML数据

  XML数据的输出强大,XML数据的输入也同样强大,拥有多个重载的Load支持从URI,TextWriter,XmlReader输入XML数据。

        static void Main(string[] args)
{
//从URI中获取XML数据,支持本地路径和URL,支持对应枚举的设置
XElement xe1 = XElement.Load(@"D:\123.xml",LoadOptions.None);
//从XmlReader中加载
XmlReader xr = XmlReader.Create(@"D:\123.xml");
XElement xe2 = XElement.Load(xr);
//从TextReader中获取数据
TextReader reader = File.OpenText(@"D:\123.xml");
XElement xe3 = XElement.Load(reader);
//从Stream中读取
XElement xe4 = XElement.Load(new FileStream(@"D:\123.xml",FileMode.Open,FileAccess.Read)); Console.ReadKey();
}

  2、从字符串中输入XML数据

  从字符串中解析数据为XML,只需要使用Parse方法。

        static void Main(string[] args)
{
string xmlString = "<?xml version=\"1.0\" encoding=\"utf-8\"?><Persons><Person><Name>刘备</Name><Age>28</Age></Person></Persons>";
XElement xe = XElement.Parse(xmlString,LoadOptions.SetLineInfo); Console.ReadKey();
}

  好用又简单

五、XML基本查询

  基本查询更加简单,跟jQuery选择器差不多,链式操作。

        static void Main(string[] args)
{
string xmlString = "<?xml version=\"1.0\" encoding=\"utf-8\"?><Persons><Person Description=\"牛人\"><Name>刘备</Name><Age>28</Age></Person></Persons>";
XElement xe = XElement.Parse(xmlString,LoadOptions.SetLineInfo);
//读取属性值
string ArriValue = xe.Elements("Person").First().Attribute("Description").Value;
//又或者
//string ArriValue = xe.Element("Person").Attribute("Description").Value;
Console.WriteLine(ArriValue); //输出 牛人 //读取元素 读取Name的后面的第一个兄弟元素
XElement xe1 = xe.Element("Person").Element("Name").ElementsAfterSelf().First();
Console.WriteLine(xe1.Value); //输出 28
//读取父节点
XElement xe2 = xe1.Parent;
Console.WriteLine(xe2.Name); Console.ReadKey();
}

  其他查询:

        static void Main(string[] args)
{
string xmlString = "<?xml version=\"1.0\" encoding=\"utf-8\"?><Persons><Person Description=\"牛人\"><Name>刘备</Name><Age>28</Age></Person><Person><Name>关羽</Name><Age>26</Age></Person></Persons>";
XElement xe = XElement.Parse(xmlString, LoadOptions.SetLineInfo);
//查询含有属性的Person节点
List<XElement> ListElement = xe.Descendants("Person").Where(x => x.HasAttributes).ToList();
foreach (XElement x in ListElement)
{
Console.WriteLine(x.Value); //输出 刘备28
}
//查询年龄为26的Person的Person节点
List<XElement> ListElement2 = xe.Descendants("Person").Where(x => x.Element("Age").Value == "").ToList();
foreach (XElement x in ListElement2)
{
Console.WriteLine(x.Value); //输出 关羽26
}
Console.ReadKey();
}

  Nodes、Descendants以及各自的AfterSelf用于转成IEnumerable<T>的LINQ查询。

六、修改XML

  修改XML也非常简单,不再废话。直接给出简单示例:

        static void Main(string[] args)
{
string xmlString = "<?xml version=\"1.0\" encoding=\"utf-8\"?><Persons><Person Description=\"牛人\"><Name>刘备</Name><Age>28</Age></Person></Persons>";
XElement xe = XElement.Parse(xmlString, LoadOptions.SetLineInfo); //这是添加在最后,如果想添加在最前面可以使用AddFirst,
//添加在本节点之前AddBeforSelf,添加在本节点之后AddAfterSelf
xe.Add(new XElement("Person",
new XElement("Name", "关羽"),
new XElement("Age", )
)
);
//删除所有子节点
xe.RemoveAll(); TextWriter tw = new StringWriter();
//第二个参数SaveOptions枚举支持设置格式,缩进,保留无关重要的空白,去除重复命名空间
xe.Save(tw, SaveOptions.None);
Console.WriteLine(tw); Console.ReadKey();
}

出处:https://www.cnblogs.com/kissdodog/p/3472171.html

第六篇 -- LINQ to XML的更多相关文章

  1. [原创]Linq to xml增删改查Linq 入门篇:分分钟带你遨游Linq to xml的世界

    本文原始作者博客 http://www.cnblogs.com/toutou Linq 入门篇(一):分分钟带你遨游linq to xml的世界 本文原创来自博客园 请叫我头头哥的博客, 请尊重版权, ...

  2. LINQ to XML LINQ学习第一篇

    LINQ to XML LINQ学习第一篇 1.LINQ to XML类 以下的代码演示了如何使用LINQ to XML来快速创建一个xml: public static void CreateDoc ...

  3. 解剖SQLSERVER 第十六篇 OrcaMDF RawDatabase --MDF文件的瑞士军刀(译)

    解剖SQLSERVER 第十六篇 OrcaMDF RawDatabase --MDF文件的瑞士军刀(译) http://improve.dk/orcamdf-rawdatabase-a-swiss-a ...

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

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

  5. C#学习之Linq to Xml

    前言 我相信很多从事.NET开发的,在.NET 3.5之前操作XML会比较麻烦,但是在此之后出现了Linq to Xml,而今天的主人公就是Linq to Xml,废话不多说,直接进入主题. 题外:最 ...

  6. C#中的Linq to Xml详解

    这篇文章主要介绍了C#中的Linq to Xml详解,本文给出转换步骤以及大量实例,讲解了生成xml.查询并修改xml.监听xml事件.处理xml流等内容,需要的朋友可以参考下 一.生成Xml 为了能 ...

  7. Linq之Linq to XML

    目录 写在前面 系列文章 linq to xml 总结 写在前面 在很多情况下,都可以见到使用xml的影子.例如,在 Web 上,在配置文件.Microsoft Office Word 文件(将wor ...

  8. [老老实实学WCF] 第六篇 元数据交换

    老老实实学WCF 第六篇 元数据交换 通过前两篇的学习,我们了解了WCF通信的一些基本原理,我们知道,WCF服务端和客户端通过共享元数据(包括服务协定.服务器终结点信息)在两个 终结点上建立通道从而进 ...

  9. WPF ListView的使用及Linq to XML练习

    环境:VS2010 控件:ListView 技术:Linq to XML:MVVM 源码:http://files.cnblogs.com/jumahe/Wpf_Customer.rar 布局描述: ...

随机推荐

  1. Elasticsearch运维经验总结

    Elasticsearch运维经验总结 2018年12月10日 16:38:41 运小白 阅读数 3811   版本说明:5.6.4(要严格注意ES及其插件.第三方工具的版本匹配关系) 系统负载:(日 ...

  2. rent a apartment

    今日焦点 month-to-month 按月 6-month minimum 至少六个月 sublease 转租 drenched in sunlight 阳光充足的 词汇实践 I am lookin ...

  3. git安装和使用配置

    1.简介 Git是一个开源的分布式版本控制系统,能用于快速高效地处理任何或小或大的项目,它是Linus Torvalds为了帮助管理Linux内核开发而开发的一个源码开放的版本控制软件. 2.Linu ...

  4. vue.js与element-ui实现菜单树形结构

    由于业务需要,要求实现树形菜单,且菜单数据由后台返回,在网上找了几篇文章,看下来总算有了解决办法.借鉴文章链接在最底部. 场景:根据业务要求,需要实现活动的树形菜单,菜单数据由后台返回,最后的效果图如 ...

  5. [转帖]华为PC端台式机电脑来啦!自研主板及自研CPU处理器

    华为PC端台式机电脑来啦!自研主板及自研CPU处理器 在性能上,4核版相当于酷睿i5 ,8核版相当于酷睿i5 8300H. https://www.bilibili.com/read/cv376376 ...

  6. inode是什么?

    理解inode,要从文件储存说起. 文件储存在硬盘上,硬盘的最小存储单位叫做"扇区"(Sector).每个扇区储存512字节(相当于0.5KB). 操作系统读取硬盘的时候,不会一个 ...

  7. 开源分布式数据库中间件 DBLE

    DBLE 是企业级开源分布式中间件,江湖人送外号 “MyCat Plus”:以其简单稳定,持续维护,良好的社区环境和广大的群众基础得到了社区的大力支持: DBLE官方网站:https://openso ...

  8. 微信小程序路径表达式解析规则

    小程序 setData 方法支持路径表达式来设置属性,例如 setData({"x.y.z": 1}). 微信官方没有公布路径表达式的语法规则及解析规则,本文所描述的路径表达式解析 ...

  9. K8S学习笔记之Kubernetes 配置管理 ConfigMap

    0x00 概述 很多情况下我们为某一应用做好镜像,当我们想修改其中的一些参数的时候,就变得比较麻烦,又要重新制作镜像,我们是不是有一种方式,让镜像根据不同的场景调用我们不同的配置文件呢,那我们就需要用 ...

  10. springboot初体验-不知道怎么创建spring-boot项目?

    https://spring.io/projects/spring-boot/ 在以上地址找到 Quick start Bootstrap your application with Spring I ...