zoukankan      html  css  js  c++  java
  • C#

     Xml
     Xml文件【library.xml】
    <?xml version="1.0" encoding="utf-8" ?>
    <!-- 图书馆 -->
    <library Name="北京首都图书馆">
      <bookstore>
        <!--记录书本的信息-->
        <book Type="必修课" ISBN="7-111-19149-2">
          <title>数据结构</title>
          <author>严蔚敏</author>
          <price>30.00</price>
        </book>
        <book Type="必修课" ISBN="7-111-19149-3">
          <title>路由型与交换型互联网基础</title>
          <author>程庆梅</author>
          <price>27.00</price>
        </book>
        <book Type="必修课" ISBN="7-111-19149-4">
          <title>计算机硬件技术基础</title>
          <author>李继灿</author>
          <price>25.00</price>
        </book>
        <book Type="必修课" ISBN="7-111-19149-5">
          <title>软件质量保证与管理</title>
          <author>朱少民</author>
          <price>39.00</price>
        </book>
        <book Type="必修课" ISBN="7-111-19149-6">
          <title>算法设计与分析</title>
          <author>王红梅</author>
          <price>23.00</price>
        </book>
        <book Type="选修课" ISBN="7-111-19149-1">
          <title>计算机操作系统</title>
          <author>7-111-19149-1</author>
          <price>28</price>
        </book>
      </bookstore>
    </library>
     实体类【BookInfo.cs】
    namespace XmlStudy.Model
    {
        public class BookInfo
        {
            /// <summary>
            /// 所对应的课程类型
            /// </summary>
            public string BookType { get; set; }
    
            /// <summary>
            /// 书所对应的ISBN号
            /// </summary>
            public string BookISBN { get; set; }
    
            /// <summary>
            /// 书名
            /// </summary>
            public string BookName { get; set; }
    
            /// <summary>
            /// 作者
            /// </summary>
            public string BookAuthor { get; set; }
    
            /// <summary>
            /// 价格
            /// </summary>
            public double BookPrice { get; set; }
        }
    }
     XmlDocument 

       使用XmlDocument是一种基于文档结构模型的方式来读取XML文件.在XML文件中,我们可以把XML看作是由文档声明(Declare),元素(Element),属性(Attribute),文本(Text)等构成的一个树.最开始的一个结点叫作根结点,每个结点都可以有自己的子结点.得到一个结点后,可以通过一系列属性或方法得到这个结点的值或其它的一些属性.例如:

    xn 代表一个结点
    xn.Name;//这个结点的名称
    xn.Value;//这个结点的值
    xn.ChildNodes;//这个结点的所有子结点
    xn.ParentNode;//这个结点的父结点

     整体案例:

    using Newtonsoft.Json;
    using System;
    using System.IO;
    using System.Xml;
    using XmlStudy.Model;
    
    namespace XmlStudy
    {
        class Program
        {
            static void Main(string[] args)
            {
                XmlDocument xmlDoc = new XmlDocument();
                XmlReaderSettings settings = new XmlReaderSettings
                {
                    IgnoreComments = true//忽略文档里面的注释
                };
                string path = Directory.GetCurrentDirectory();
                XmlReader xmlReader = XmlReader.Create(path + "\XmlFile\library.xml", settings);
                xmlDoc.Load(xmlReader);
                xmlReader.Close();
    
                //得到根节点
                XmlNode libraryNode = xmlDoc.SelectSingleNode("library");//参数区分大小写,没有此节点时返回null
    
                //获取属性值
                XmlElement libraryElement = (XmlElement)libraryNode;
                Console.WriteLine(libraryElement.GetAttribute("Name"));//参数区分大小写,没有此节点时返回null
    
                //得到bookstore节点
                XmlNode bookStoreNode = xmlDoc.SelectSingleNode("/library/bookstore");
                XmlNodeList bookNodeList = bookStoreNode.ChildNodes;
                foreach (XmlNode bookNode in bookNodeList)
                {
                    BookInfo bookInfo = new BookInfo();
    
                    XmlElement bookElement = (XmlElement)bookNode;
                    bookInfo.BookType = bookElement.GetAttribute("Type");
                    bookInfo.BookISBN = bookElement.GetAttribute("ISBN");
    
                    bookInfo.BookName = bookNode.SelectSingleNode("title").InnerText;//没有此节点,InnerText属性会异常
                    bookInfo.BookAuthor = bookNode.SelectSingleNode("author").InnerText;
                    bookInfo.BookPrice = Convert.ToDouble(bookNode.SelectSingleNode("price").InnerText);
    
                    Console.WriteLine(JsonConvert.SerializeObject(bookInfo));
                }
    
    
                //新加一个节点
                XmlElement newBookNode = xmlDoc.CreateElement("book");
    
                //设置节点属性
                XmlAttribute newType = xmlDoc.CreateAttribute("Type");
                newType.InnerText = "新加类型";
                newBookNode.SetAttributeNode(newType);
    
                //添加子节点
                XmlElement titleElement = xmlDoc.CreateElement("title");
                titleElement.InnerText = "新加书籍";
                newBookNode.AppendChild(titleElement);
    
                bookStoreNode.AppendChild(newBookNode);
                xmlDoc.Save(path + "\XmlFile\library.xml");
    
    
                //删除一个节点
                string strPath = string.Format("/library/bookstore/book[@ISBN="{0}"]", "7-111-19149-4");
                XmlElement selectDeleteXe = (XmlElement)xmlDoc.SelectSingleNode(strPath);  //SelectSingleNode 根据XPath表达式,获得符合条件的第一个节点.
                selectDeleteXe.ParentNode.RemoveChild(selectDeleteXe);
                xmlDoc.Save(path + "\XmlFile\library.xml");
    
                //修改数据
                strPath = string.Format("/library/bookstore/book[@ISBN="{0}"]", "7-111-19149-3");
                XmlElement selectUpdateXe = (XmlElement)xmlDoc.SelectSingleNode(strPath);
                selectUpdateXe.SetAttribute("Type", "修改");//也可以通过SetAttribute来增加一个属性
                selectUpdateXe.GetElementsByTagName("title").Item(0).InnerText = "修改标题";
                selectUpdateXe.GetElementsByTagName("author").Item(0).InnerText = "修改作者";
                selectUpdateXe.GetElementsByTagName("price").Item(0).InnerText = "100.0";
                xmlDoc.Save(path + "\XmlFile\library.xml");
            }
        }
    }
     使用XmlDocument - Read / Write / Delete / Update
     加载xml文件
    XmlDocument xmlDoc = new XmlDocument();
    XmlReaderSettings settings = new XmlReaderSettings
    {
        IgnoreComments = true//忽略文档里面的注释
    };
    string path = Directory.GetCurrentDirectory();
    XmlReader xmlReader = XmlReader.Create(path + "\XmlFile\library.xml", settings);
    xmlDoc.Load(xmlReader);
    xmlReader.Close();
     加载xml字符串
    string plan = @"Xml字符串";
    XmlDocument xml = new XmlDocument();
    xml.LoadXml(plan);
     读取【特别注意,特殊的xml比如:<MSG xmlns="http://www.travelsky.com/2006/dcsi"> 这个xmlns=会导致获取不到这个节点的值,可以将其替换为xmlns1=】
    //得到根节点
    XmlNode libraryNode = xmlDoc.SelectSingleNode("library");//参数区分大小写,没有此节点时返回null
    
    //获取属性值
    XmlElement libraryElement = (XmlElement)libraryNode;
    Console.WriteLine(libraryElement.GetAttribute("Name"));//参数区分大小写,没有此节点时返回null
    
    //得到bookstore节点
    XmlNode bookStoreNode = xmlDoc.SelectSingleNode("/library/bookstore");
    XmlNodeList bookNodeList = bookStoreNode.ChildNodes;
    foreach (XmlNode bookNode in bookNodeList)
    {
        BookInfo bookInfo = new BookInfo();
    
        XmlElement bookElement = (XmlElement)bookNode;
        bookInfo.BookType = bookElement.GetAttribute("Type");
        bookInfo.BookISBN = bookElement.GetAttribute("ISBN");
    
        bookInfo.BookName = bookNode.SelectSingleNode("title").InnerText;//没有此节点,InnerText属性会异常
        bookInfo.BookAuthor = bookNode.SelectSingleNode("author").InnerText;
        bookInfo.BookPrice = Convert.ToDouble(bookNode.SelectSingleNode("price").InnerText);
    
        Console.WriteLine(JsonConvert.SerializeObject(bookInfo));
    }
     添加
    //新加一个节点
    XmlElement newBookNode = xmlDoc.CreateElement("book");
    
    //设置节点属性
    XmlAttribute newType = xmlDoc.CreateAttribute("Type");
    newType.InnerText = "新加类型";
    newBookNode.SetAttributeNode(newType);
    
    //添加子节点
    XmlElement titleElement = xmlDoc.CreateElement("title");
    titleElement.InnerText = "新加书籍";
    newBookNode.AppendChild(titleElement);
    
    bookStoreNode.AppendChild(newBookNode);
    xmlDoc.Save(path + "\XmlFile\library.xml");
     修改
    //修改数据
    strPath = string.Format("/library/bookstore/book[@ISBN="{0}"]", "7-111-19149-3");
    XmlElement selectUpdateXe = (XmlElement)xmlDoc.SelectSingleNode(strPath);
    selectUpdateXe.SetAttribute("Type", "修改");//也可以通过SetAttribute来增加一个属性
    selectUpdateXe.GetElementsByTagName("title").Item(0).InnerText = "修改标题";
    selectUpdateXe.GetElementsByTagName("author").Item(0).InnerText = "修改作者";
    selectUpdateXe.GetElementsByTagName("price").Item(0).InnerText = "100.0";
    xmlDoc.Save(path + "\XmlFile\library.xml");
     删除
    //删除一个节点
    string strPath = string.Format("/library/bookstore/book[@ISBN="{0}"]", "7-111-19149-4");
    XmlElement selectDeleteXe = (XmlElement)xmlDoc.SelectSingleNode(strPath);  //SelectSingleNode 根据XPath表达式,获得符合条件的第一个节点.
    selectDeleteXe.ParentNode.RemoveChild(selectDeleteXe);
    xmlDoc.Save(path + "\XmlFile\library.xml");
  • 相关阅读:
    vim操作
    git命令
    Python笔记(二)
    python笔记
    gdb笔记 ---《Linux.C编程一站式学习》
    python笔记——dict和set
    echo $?
    FastDFS与Nginx环境配置
    Nginx依赖库安装
    mixin多继承包装过程
  • 原文地址:https://www.cnblogs.com/gygtech/p/14790835.html
Copyright © 2011-2022 走看看