(十一)CSharp-LINQ-LINQToXML(4)

这篇具有很好参考价值的文章主要介绍了(十一)CSharp-LINQ-LINQToXML(4)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

一、XML 类

1、创建、保存、加载和显示 XML 文档

        static void Main(string[] args)
        {
            XDocument employees1 =
                new XDocument(//创建 XML 文档
                    new XElement("Employees",//创建根元素
                    new XElement("Name", "Box Smith"),//创建元素
                    new XElement("Name", "Sally Jones")//创建元素
                    )
                    );

            employees1.Save("EmployeesFile.xml");//保存到文件

            //将保存的文档加载到新变量中
            XDocument employees2 = XDocument.Load("EmployeesFile.xml");

            Console.WriteLine(employees2);//显示文档
            Console.ReadKey();
        }

输出结果:

><Employees>
  <Name>Box Smith</Name>
  <Name>Sally Jones</Name>
</Employees>
1)创建 XML 树
        static void Main(string[] args)
        {
            XDocument employeeDoc =
                new XDocument(//创建文档
                    new XElement("Employees",//创建根元素

                    new XElement("Employee",//第一个 Employee 元素
                    new XElement("Name", "Box Smith"),
                    new XElement("PhoneNumber", "408-555-10000")),

                    new XElement("Employee",//第二个 Employee 元素
                    new XElement("Name", "Sally Jones"),
                    new XElement("PhoneNumber", "415-555-2000"),
                     new XElement("PhoneNumber", "415-555-2001"))

                    )
                    );

            Console.WriteLine(employeeDoc);//显示文档
            Console.ReadKey();
        }

输出结果:

<Employees>
  <Employee>
    <Name>Box Smith</Name>
    <PhoneNumber>408-555-10000</PhoneNumber>
  </Employee>
  <Employee>
    <Name>Sally Jones</Name>
    <PhoneNumber>415-555-2000</PhoneNumber>
    <PhoneNumber>415-555-2001</PhoneNumber>
  </Employee>
</Employees>
2)使用 XML 树的值

表20-2 查询 XML 的方法

方法名称 返回类型 描述
Nodes Xdocument,XElement IEnumerable<object> 返回当前节点的所有节点(不管是什么类型)
Elements Xdocument,XElement IEnumerable<XElement> 返回当前节点的 XElement 子节点,或所有具有某个名字的子节点
Element Xdocument,XElement XElement 返回当前节点的第一个 XElement 子节点,或具有某个名字的子节点
Descendants XElement IEnumerable<XElement> 返回所有的 XElement 子代节点,或所有具有某个名字的 XElement 子代节点,不管它们处于当前节点下什么嵌套级别
DescendantsAndSelf XElement IEnumerable<XElement> 和 Descendants 一样,但是包括当前节点
Ancestors XElement IEnumerable<XElement> 返回所有上级 XElement 节点,或者所有具有某个名字的上级 XElement 节点
AncestorsAndSelf XElement IEnumerable<XElement> 和 Ancestors 一样,但是包括当前节点
Parent XElement XElement 返回当前节点的父节点
  • Nodes
//获取 XComment 节点
IEnumerable<XComment> comments = xd.Nodes().OfType<XComment>();
  • Elements
//获取名为 PhoneNumer 的子 XElement 节点
IEnumerable<XElement> empPhones = emp.Element("PhoneNumer");
  • Element
    获取第一个子 XElement 节点。

Element 和 Elements 方法示例:

       static void Main(string[] args)
        {
            XDocument employeeDoc =
                new XDocument(
                    new XElement("Employees",

                    new XElement("Employee",
                    new XElement("Name", "Box Smith"),
                    new XElement("PhoneNumber", "408-555-10000")),

                    new XElement("Employee",
                    new XElement("Name", "Sally Jones"),
                    new XElement("PhoneNumber", "415-555-2000"),
                     new XElement("PhoneNumber", "415-555-2001"))

                    )
                    );

            XElement root = employeeDoc.Element("Employees");
            IEnumerable<XElement> employees = root.Elements();

            foreach(XElement emp in employees)
            {
                XElement empNameNode = emp.Element("Name");
                Console.WriteLine(empNameNode.Value);

                IEnumerable<XElement> empPhones = emp.Elements("PhoneNumber");
                foreach (XElement phone in empPhones)
                    Console.WriteLine($"     { phone.Value }");
            }

            Console.ReadKey();
        }

输出结果:

Box Smith
408-555-10000
Sally Jones
415-555-2000
415-555-2001

3)增加节点以及操作 XML
   static void Main(string[] args)
        {
            XDocument xd = new XDocument(//创建 XML 树
                new XElement("root",
                new XElement("first")
                )
                );

            Console.WriteLine("Original tree");
            Console.WriteLine(xd);Console.WriteLine();//显示树

            XElement rt = xd.Element("root");//获取第一个元素
            rt.Add(new XElement("second"));//添加子元素
            rt.Add(new XElement("third"),//再添加3个子元素
                new XComment("Important Comment"),
                new XElement("fourth"));

            Console.WriteLine("Modified tree");
            Console.WriteLine(xd);//显示 Modified tree

            Console.ReadKey();
        }

输出结果:

Original tree
<root>
  <first />
</root>

Modified tree
<root>
  <first />
  <second />
  <third />
  <!--Important Comment-->
  <fourth />
</root>

表20-3 操作 XML 的方法

方法名称 从哪里调用 描述
Add 父节点 在当前节点的既有子节点前后加新的子节点
AddFirst 父节点 在当前节点的既有子节点前增加新的子节点
AddBeforeSelf 节点 在同级别的当前节点之前增加新的节点
AddAfterSelf 节点 在同级别的当前节点之后增加新的节点
Remove 节点 删除当前所选的节点及其内容
RemoveNodes 节点 删除当前所选的 XElement 及其内容
SetElement 父节点 设置节点的内容

2、使用 XML 特性

特性提供了有关 XElement 节点的额外信息,它放在 XML 元素的开始标签中。
如:

        static void Main(string[] args)
        {
            XDocument xd = new XDocument(
                new XElement("root",
                new XAttribute("color", "red"),//特性构造函数
                new XAttribute("Size", "large"),//特性构造函数
                new XElement("first"),
                new XElement("second")
                )
                );

            Console.WriteLine(xd);

            XElement rt = xd.Element("root");//获取元素

            XAttribute color = rt.Attribute("color");
            XAttribute size = rt.Attribute("Size");//获取特性

            Console.WriteLine($"color is {color.Value}");//显示特性值
            Console.WriteLine($"size is {size.Value}");

//移除特性
//rt.Attribute("color").Remove();//移除 color 特性
//rt.SetAttributeValue("Size",nulll);//移除 size 特性

//变更特性值
//rt.SetAttributeValue("Size","medium");
//rt.SetAttributeValue("width","narrow");//如果没有这个特性,就添加特性
            Console.ReadKey();
        }

输出结果:

<root color="red" Size="large">
  <first />
  <second />
</root>
color is red
size is large

2、其他类型的节点

1)XComment
new XComment("This is a comment");

XML 文档行为:

<!--This is a comment-->
2)XDeclaration

XML 文档从包含 XML 使用的版本号、使用的字符编码类型以及文档是否依赖外部引用的一行开始。

new XDeclaration("1.0", "utf-8", "yes");

XML 文档行:

<?xml version="1.0" encoding="utf-8" standalone="yes"?>
3)XProcessingInstruction

XML 处理指令用于提供关于 XML 文档的使用和解释方法的额外数据。处理指令最常用于关联 XML 文档和样式表。

可以使用 XProcessingInstruction 构造函数来包含处理指令。它接受两个字符串参数:目标和数据串。如果处理指令接受多个数据参数,这些参数必须包含在 XProcessingInstruction 构造函数的第二个字符串参数中。

new XProcessingInstruction("XML-stypesheet",
						    @"href=""stories"", type=""text/css""")

XML 文档行:

<?xml-stylesheet href="stories.css" type=""text/css?>

例如:

     static void Main(string[] args)
        {
            XDocument xd = new XDocument(
                new XDeclaration("1.0", "utf-8", "yes"),
                new XComment("This is a comment"),
                new XProcessingInstruction("xml-stylesheet",
                                            @"href=""stories.css"" type=""text/css"""),
                new XElement("root",
                new XElement("first"),
                new XElement("second")
                )
                );

            Console.WriteLine(xd);

            Console.ReadKey();
        }

输出结果:

<!--This is a comment-->
<?xml-stylesheet href="stories.css" type="text/css"?>
<root>
  <first />
  <second />
</root>

二、使用 LINQ to XML 的 LINQ 查询

1)创建保存 XML 文档:

示例:

        static void Main(string[] args)
        {
            XDocument xd = new XDocument(
                new XElement("MyElements",
                new XElement("first",
                new XAttribute("color","red"),
                new XAttribute("size","small")),

                 new XElement("second",
                new XAttribute("color", "red"),
                new XAttribute("size", "medium")),

                 new XElement("third",
                new XAttribute("color", "blue"),
                new XAttribute("size", "large"))));


            Console.WriteLine(xd);//显示 XML 树
            xd.Save("SimpleSample.xml");//保存 XML 树
            Console.ReadKey();
        }

XML 文档行:

<MyElements>
  <first color="red" size="small" />
  <second color="red" size="medium" />
  <third color="blue" size="large" />
</MyElements>

2)加载 XML 文档,使用 LINQ 查询 XML:

        static void Main(string[] args)
        {
            XDocument xd =  XDocument.Load("SimpleSample.xml"); //加载文档
            XElement rt = xd.Element("MyElements"); //获取根元素

            var xyz = from e in rt.Elements() //选择名称包含
                      where e.Name.ToString().Length == 5 //5个字符的元素
                      select e;

            foreach (XElement x in xyz)
                Console.WriteLine(x.Name.ToString());//显示所选的元素

            Console.WriteLine();

            foreach (XElement x in xyz)
                Console.WriteLine("Name:{0}, color: {1},size: {2}",
                                  x.Name,
                                  x.Attribute("color").Value,
                                  x.Attribute("size").Value);

            Console.ReadKey();
        }

输出结果:

first
third

Name:first, color: red,size: small
Name:third, color: blue,size: large

3)如下代码使用了一个简单的查询来获取 XML 树的所有顶层元素,并且为每一个元素创建了一个匿名类型的对象。

        static void Main(string[] args)
        {
            XDocument xd =  XDocument.Load("SimpleSample.xml"); //加载文档
            XElement rt = xd.Element("MyElements"); //获取根元素

            var xyz = from e in rt.Elements()
                      select new { e.Name, color = e.Attribute("color") };

            foreach (var x in xyz)
                Console.WriteLine(x);//默认格式化

            Console.WriteLine();

            foreach (var x in xyz)
                Console.WriteLine("{0,-6},    color: {1,-7}",x.Name,x.color.Value);

            Console.WriteLine();

            Console.ReadKey();
        }

//创建匿名类型:new { e.Name, color = e.Attribute("color") };

输出结果:文章来源地址https://www.toymoban.com/news/detail-509715.html

{ Name = first, color = color="red" }
{ Name = second, color = color="red" }
{ Name = third, color = color="blue" }

first ,    color: red
second,    color: red
third ,    color: blue

到了这里,关于(十一)CSharp-LINQ-LINQToXML(4)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • (十一)地理数据库创建——创建新的地理数据库

    地理数据库(Geodatabase)是按照层次型的数据对象来组织地理数据,这些数据对象包括对象类(Object Classes)、要素类(Feature Classes)和要素数据集(Feature dataset)。 对象类是指存储非空间数据的表格 (Table)。 要素类是具有相同几何类型和属性的要素的集合,即同类空间要素

    2024年02月05日
    浏览(29)
  • OpenCV:创建窗口,图片显示和保存

    目录 cv2.waitKey() 窗口创建:cv2.namedWindow() 窗口大小调整:cv2.resizeWindow() 窗口显示:cv2.imshow() 关闭窗口:cv2.destroyAllWindows() 图片读取:cv2.imread() 图片保存:cv2.imwrite() 代码示例 waitKey()的基本逻辑:他会在一定时间内等待接收键盘的一个值; 返回值 为键盘按键的ASCII值; dela

    2024年01月19日
    浏览(85)
  • Java 中的线程是什么,如何创建和管理线程-上(十一)

    Java 中的线程是指程序中可以独立执行的最小单位。在 Java 中,创建线程通常有两种方式:继承 Thread 类和实现 Runnable 接口。线程的管理包括控制线程状态、线程优先级、线程同步等。 一、Java 中的线程 线程是程序中能够独立执行的最小单位,它具有自己的执行路径、调用栈

    2024年02月03日
    浏览(39)
  • solr快速上手:搭建solr集群并创建核心,设置数据同步(十一)

    前几章我们已经讲解了solr单机版的基本使用,但实际生产中,为了保证高可用、高性能,我们一般会采用集群模式,所以接下来,我们继续讲解solr集群的搭建和基本操作 在讲解solr集群模式前,我们要先了解“分片”的概念。 当节点由一个拓展为多个时,数据存储和同步问

    2024年02月13日
    浏览(85)
  • Threejs进阶之十一:使用FontLoader和TextGeometry创建三维文字

    在Threejs中我们可以通过FontLoader和TextGeometry结合使用来创建三维文字,FontLoader用于加载JSON格式的字体,FontLoader返回值是表示字体的Shape类型的数组;TextGeometry用于将文本生成为单一的几何体。下面我们先来了解下这两个类 用于加载JSON格式的字体的类。返回font, 返回值是表示

    2024年02月06日
    浏览(45)
  • Outlook提示无法保存该附件。无法创建文件......

    Outlook提示无法保存该附件。无法创建文件........ 在Outlook中打开附件或者是下载附件的时候,弹出提示信息:无法保存该附件。无法创建文件:****。请右键单击要在其中创建文件的文件夹,然后单击快捷菜 单上的“属性”,检查对该文件夹的权限。 或者提示:Cannot create fi

    2024年02月04日
    浏览(49)
  • 成本中心修改或者创建保存时增强的实现

    成本中心修改或者创建保存时增强 用户出口程序为:EXIT_SAPLKMA1_003。 可以通过SMOD 或者 CMOD来添加增强代码。 CMOD-COOMKS02 -EXIT_SAPLKMA1_003 按公司要求,写了段代码检查 创建利成本中心时,业务范围要规范输入。    效果如下:  

    2024年02月15日
    浏览(39)
  • (七)CSharp-CSharp图解教程版-事件

    发布者/订阅者模式(publish/subscriber pattern): 很多程序都有一个共同的需求,即当一个特定的程序事件发生时,程序的其他部分可以得到该事件已经发生的通知。 发布者: 发布者类定义了一系列程序的其他部分可能感兴趣的事件。 发布某个事件的类或结构,其他类可以在该

    2024年02月08日
    浏览(41)
  • opencv+图像处理(GUI)1-0图像:创建加载显示保存关闭

    本专栏代码地址 https://github.com/xiawei20161308104/xv_opencv_tutorials 本节代码路径 xv_opencv_tutorials/ImageProcessinginOpenCV/load_img.py 创建窗口 namedWindow 从本地加载图像 imread 在窗口中展示图像 imshow 将图像写入文件 imwrite 关闭窗口 destroyWindow destroyAllWindows opencv提供 cv.namedWindow 函数实现创建一

    2023年04月21日
    浏览(41)
  • 创建图书表book,保存图书的信息,要求使用InnoDB引擎存储

    我们基于图书馆管理数据库dblibrary,现需要在该数据库中完成创建和管理表的操作。 操作项目如下: 先用MySQL8.0环境 (1)创建图书表book,保存图书的信息。图书表book结构如下表所示。要求使用InnoDB引擎存储。 图书表book结构 字段名称 字段内容 数据类型 长度 说明 Bookid 图

    2024年02月08日
    浏览(39)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包