C#操作XML文档总结

包括XMLWriter写入,XmlReader读取,XmlDocument操作,DataSet.ReadXML(),DataSet.WriteXML(),LINQ查询XML

1.XMLWriter写入XML数据

  结果会覆盖原文档。

c#_code:

            //使用XMLWriter写XML数据
            XmlWriterSettings settings = new XmlWriterSettings();
            settings.Indent = true; //缩进
            //settings.NewLineOnAttributes = true; //属性换新的一行
            XmlWriter writer = XmlWriter.Create("Books.xml", settings);//创建XmlWriter实例
            writer.WriteStartDocument();//XML文档声明
            writer.WriteStartElement("book"); //开始标记 1
            writer.WriteAttributeString("Type","科幻");//添加属性
            writer.WriteAttributeString("ISBN", "001-001-001");//添加属性
            writer.WriteElementString("title", "名侦探柯南");//添加元素
            writer.WriteElementString("price", "99.99");//添加元素
            writer.WriteStartElement("author");//开始标记 2
            writer.WriteElementString("name", "谁谁谁");//添加元素
            writer.WriteEndElement();//结束标记 2
            writer.WriteEndElement();//结束标记 1
            writer.WriteEndDocument(); //关闭所有文档标记
            writer.Flush(); //刷新流
            writer.Close(); //关闭流                    

结果如下:

<?xml version="1.0" encoding="utf-8"?>
<book Type="科幻" ISBN="001-001-001">
  <title>名侦探柯南</title>
  <price>99.99</price>
  <author>
    <name>谁谁谁</name>
  </author>
</book>

2.XMLReader读取XML数据

xml_data:

<?xml version="1.0" encoding="utf-8"?>
<book Type="科幻" ISBN="001-001-001">
  <title>哈利波特</title>
  <price>99.99</price>
  <author>
    <name>JK罗琳</name>
  </author>
</book>
<book Type="青春" ISBN="001-001-002">
  <title>左耳</title>
  <price>9.99</price>
  <author>
    <name>饶雪漫</name>
  </author>
</book>
<book Type="悬疑" ISBN="001-001-003">
  <title>盗墓笔记</title>
  <price>99.99</price>
  <author>
    <name>南派三叔</name>
  </author>
</book>

c#_code:

此处待续。。。。

3.XmlDocument操作XML

(1)插入节点,在原文档下追加,原文档必须要有根元素 <Books></Books>。

c#_code:

            XmlDocument doc = new XmlDocument();
            doc.Load("D:\\Books.xml");//加载XML文档,文件必须存在且有根元素
            //创建一个节点
            XmlElement newbook = doc.CreateElement("book");
            //设置属性
            newbook.SetAttribute("type", "story");
            newbook.SetAttribute("publishdate", "1993");
            newbook.SetAttribute("ISBN", "002-123-321");
            //设置元素
            XmlElement name = doc.CreateElement("Name");
            name.InnerText = "I have a Dream";
            newbook.AppendChild(name);
            XmlElement price = doc.CreateElement("Price");
            price.InnerText = "9.99";
            newbook.AppendChild(price);
            //添加到节点
            doc.DocumentElement.AppendChild(newbook);
            //写入磁盘(追加)
            XmlTextWriter tr = new XmlTextWriter("D:\\Books.xml", null);
            tr.Formatting = Formatting.Indented;//设置缩进格式
            doc.WriteContentTo(tr);//保存 写入
            tr.Close();        

结果如下:

<?xml version="1.0" encoding="utf-8"?>
<Books>
  <book type="story" publishdate="1993" ISBN="002-123-321">
    <Name>I have a Dream</Name>
    <Price>9.99</Price>
  </book>
</Books>

(2)XmlDocument读取某个节点的元素

xml_data:

<?xml version="1.0" encoding="utf-8"?>
<bookstore>
    <book Type="科幻" ISBN="001-001-001">
      <title>哈利波特</title>
      <price>99.99</price>
      <author>
        <name>JK罗琳</name>
      </author>
    </book>
    <book Type="青春" ISBN="001-001-002">
      <title>左耳</title>
      <price>9.99</price>
      <author>
        <name>饶雪漫</name>
      </author>
    </book>
    <book Type="悬疑" ISBN="001-001-003">
      <title>盗墓笔记</title>
      <price>99.99</price>
      <author>
        <name>南派三叔</name>
      </author>
    </book>
</bookstore>

c#_code:

            XmlDocument doc = new XmlDocument();
            doc.Load("D:\\Books.xml");
            //输出所有节点为Name的元素
            //1.
            XmlNodeList nodelist = doc.GetElementsByTagName("title");
            //2.使用XPath语法从文档中检索一组节点
            //XmlNodeList nodelist = doc.SelectNodes("/bookstore/book/title");
            foreach (XmlNode node in nodelist)
            {
                richTextBox1.AppendText(node.InnerXml + "\r\n");
            }

读取结果:

    哈利波特
    左耳
    盗墓笔记

(2)XMLDocument获取指定节点的元素

4.XML文档与ADO.NET对象相互转换

适用于版本.NET3.0以上

    using System.Data;
    using System.Xml;
    using System.Data.SqlClient;
    using System.Xml.Linq;

            string connString = "server=服务器名;database=数据库;uid=账户;pwd=密码";
            ///ADO.NET数据转换XML文档
            //1:创建一个ADO.NET对象,生成一个DataSet对象
            SqlConnection conn = new SqlConnection(connString);
            SqlDataAdapter dataAdapter1 = new SqlDataAdapter("select Barcode from Books", conn);
            DataSet dataSet1 = new DataSet();
            dataAdapter1.Fill(dataSet1, "BooksBarCode");
            //2:把XML文档存到磁盘中(覆盖数据)
            string file = @"C:\Users\WIN20150720\Desktop\Books.xml";
            dataSet1.WriteXml(file);

            ///XML文档转换ADO.NET数据
            //1:创建DataSet对象
            DataSet dataSet2 = new DataSet();
            //2:读取XML文档
            dataSet2.ReadXml(file);
            //3:绑定到网格
            dataGridView1.DataSource = dataSet2.Tables[0];

            ///SQL从数据库查询
            //根据BarCode获取全部信息
            string barcode = "";
            foreach (DataRow dr in dataSet2.Tables[0].Rows)
            {
                barcode += dr["Barcode"].ToString() + ",";
            }
            barcode = barcode.Substring(0, barcode.LastIndexOf(","));
            string sql = string.Format("Select * from Books where BarCode in({0})", barcode);
            SqlDataAdapter dataAdapter2 = new SqlDataAdapter(sql, conn);
            DataSet dataSet3 = new DataSet();
            dataAdapter2.Fill(dataSet3, "BooksInfo");
            string file2 = @"C:\Users\WIN20150720\Desktop\AllBooks.xml";
            dataSet3.WriteXml(file2);

5.LINQ从XML文档查询

(1)

data_xml:

<?xml version="1.0" encoding="utf-8" ?>
<Data>
  <Products>
    <Product Name="West Side Story" Price="9.99m" SuppelierID="1"/>
    <Product Name="Assassins" Price="14.99m" SuppelierID="2"/>
    <Product Name="Frogs" Price="13.99m" SuppelierID="1"/>
    <Product Name="Sweeney Todd" Price="9.99m" SuppelierID="3"/>
  </Products>
  <Suppliers>
    <Supplier Name="Solely Sondheim" SupplierID="1"/>
    <Supplier Name="CD-by-CD-by-Sondheim" SupplierID="2"/>
    <Supplier Name="Barbershop CDs" SupplierID="3"/>
  </Suppliers>
</Data>

应用:

using System.Xml.Linq;

namespace ConsoleApplication1
{
    class XML_LINQ
    {
        static void Main()
        {
            //将产品和供货商连接起来,价格高于10美元,先按供货商名排序,在按产品名排序,最后打印供货商名和产品名
            //供货商和产品编码使用XML文件
            XDocument doc = XDocument.Load("data.xml");    //XDocument使用命名空间System.Xml.Linq;
            var filtered = from p in doc.Descendants("Product")
                            join s in doc.Descendants("Supplier")
                            on (int)p.Attribute("SupplierID")
                            equals (int)s.Attribute("SupplierID")
                            where (decimal)p.Attribute("Price") > 10
                            orderby (string)s.Attribute("Name"), (string)p.Attribute("Name")
                            select new
                            {
                                SupplierName = (string)s.Attribute("Name"),
                                ProductName = (string)s.Attribute("Name")
                            };
            foreach (var v in filtered)
            {
                Console.WriteLine("Supplier={0};Product={1}", v.SupplierName, v.ProductName);
            }
        }
    }
}

(2)

xml_data:  D:\\Books.xml

<?xml version="1.0" encoding="utf-8"?>
<bookstore>
    <book Type="科幻" ISBN="001-001-001">
      <title>哈利波特</title>
      <price>99.99</price>
      <author>
        <name>JK罗琳</name>
      </author>
    </book>
    <book Type="青春" ISBN="001-001-002">
      <title>左耳</title>
      <price>9.99</price>
      <author>
        <name>饶雪漫</name>
      </author>
    </book>
    <book Type="悬疑" ISBN="001-001-003">
      <title>盗墓笔记</title>
      <price>99.99</price>
      <author>
        <name>南派三叔</name>
      </author>
    </book>
</bookstore>

应用1:根据书名查找价格和作者

       //根据书名查找价格和作者                   XDocument doc = XDocument.Load("D:\\Books.xml");
            var query = from p in doc.Element("bookstore").Elements("book")
                        where (string)p.Element("title") == "左耳"
                        select p;
            query.ToList().ForEach(item =>
            {
                decimal price = (decimal)item.Element("price");
                string author = item.Element("author").Value;
            });

结果:price=9.99  author=饶雪漫

应用2:查找所有的书名

            //查找所有的书名
            XDocument xdoc = XDocument.Load("D:\\Books.xml");
            var query = from title in xdoc.Descendants("title")
                        select title.Value;
            foreach (var item in query)
            {
                richTextBox1.AppendText(item + "\r\n");
            }

结果:   哈利波特

    左耳

    盗墓笔记

时间: 2024-08-28 03:28:38

C#操作XML文档总结的相关文章

操作XML文档遇到的XMLNS问题及解决方法 (C# 和 PHP)

原文:操作XML文档遇到的XMLNS问题及解决方法 (C# 和 PHP) 不管是用 PHP 还是 C#, 在操作 XML 的时候我们除了一个节点一个节点去取值之外, 还有一个非常方便的表达式, 就是 XPATH 而昨晚在使用 XPATH 的时候, 遇到一个问题, 改了一个晚上才搞定, 差点没吐血. 果然基础知识要掌握扎实啊!! 假设有以下一份 XML 文档: 我们要获取所有歌曲的标题, 一般是使用以下的 XPATH 表达式: 代码如下: /playlist/trackList/track/tit

C#操作XML文档(XmlDocument、XmlNode、XmlAttribute、SelectSingleNode、SelectNodes、XmlNodeList)

XML文档是一种通用的文档,这种文档既可以用.config作为后缀也可以用.xml作为后缀.XML文档主要由元素节点和节点的属性共同构成的.它有且仅有一个根节点,其他的节点全部都是根节点的子节点或者子子节点:每一个节点有开始就一定会有结束,不可能出现有开始无结束的节点,节点主要有两种类型:有InnerText的<city>……</city>和没有InnerText的<city……/>.在节点中含有属性,一个节点可以含有多个属性,每个属性是由名字和值共同构成的. 在XML

java操作xml文档

目前最常用的XML解析技术是DOM和SAX. DOM是基于XML的树结构来完成解析的,适用于多次访问的XML文档,但是DOM解析比较消耗资源:而SAX是基于事件解析,适用于大数据量的XML文档,占用资源少,内存消耗小. DOM是文档对象模型(Document Object Model) 首先DOM会将XML文档映射成一颗倒挂的树,在这棵树中,每个节点都是以节点对象的形式存在的. 我们通过操作这些对象就可以完成XML文件的读写任务了. 我们可以直接根据节点的名称或属性查找该节点对象,也可以根据一个

C#操作xml文档增删改查(Linq to XML)

1.创建xml 1 public static void CreateXmlDoc() 2 { 3 XElement myDoc = 4 new XElement("Customers", 5 new XElement("Customer", new XAttribute("ID", "1"), 6 new XElement("Usename", "Rock Zed"), 7 new X

文档对象模型操作xml文档

简介 :文档对象模型(DOM)是一种用于处理xml文档的API函数集. 2.1文档对象模型概述 按照W3C的定义,DOM是“一种允许程序或脚本动态地访问更新文档内容,结构和样式的.独立于平台和语言的规范化接口.DOM是表示文档(比如HTML和XML)和访问.操作构成文档的各种元素的应用程序接口,它以树状结构表示HTML和XML文档,定义了遍历这个树和检查.修改树的节点的方法和属性. DOM的核心API还允许你创建和填充文件.加载文档并保存. 2.2DOM实现 微软的net框架在Systemx.x

用ORM的思想操作XML文档,一个对象就搞定不要太简单。滚蛋吧!XmlDocument、XmlNode、Xml***……

大家有没有这样的感受,一涉及XML文档操作就得百度一遍.是不是非!常!烦!.各种类型,各种方法,更别提为了找到一个节点多费劲.本来想写个XML操作的工具方法,写了两行一想既然XML文档是有规律的,如果抽象成一个树形结构的类,查找节点是不是就可以用lambda了,创建修改都是操作类,那不是好用得飞起!说干就干,经过两天打磨,终于是大功告成.系统默认的XML文件相关操作我就不吐槽了,来看看怎么飞起的吧. 设计思路: 写着好多啊,简单来说就是把XML标签分为两类:XmlChildTag子标签和XmlB

C# 操作XML文档 使用XmlDocument类方法

W3C制定了XML DOM标准.很多编程语言中多提供了支持W3C XML DOM标准的API.我在之前的文章中介绍过如何使用Javascript对XML文档进行加载与查询.在本文中,我来介绍一下.Net中的XmlDocument类.它支持并扩展了W3C XML DOM标准.它将整个XML文档都先装载进内存中,然后再对XML文档进行操作,所以如果XML文档内容过大,不建议使用XmlDocument类,因为会消耗过多内存.对于很大的XML文档,可以使用XmlReader类来读取.因为XmlReade

XML DOM (Document Object Model) 定义了访问和操作 XML 文档的标准方法。

XML DOM DOM 把 XML 文档视为一种树结构.通过这个 DOM 树,可以访问所有的元素.可以修改它们的内容(文本以及属性),而且可以创建新的元素.元素,以及它们的文本和属性,均被视为节点. 在本教程的较早章节中,我们介绍了 XML DOM,并使用了 XML DOM 的 getElementsByTagName() 从 DOM 树中取回数据. 在本节中,我们将讲解一些其他较常用的 XML DOM 方法.在本例中,我们使用 XML 文件 books.xml,并使用一个 JavaScript

PHP 操作XML文档

<<<操作符需PHP5.3以上版本才能支持 <?php $string = <<<XML <?xml version='1.0' encoding='GBK'?>           此行要顶格写 <root> <title>Forty What?</title> <from>Joe</from> <to>Jane</to> <body>    I know