XML在平常生活中用得很多,它的结构很简单,跟windows explorer有点像。

对它进行操作主要有三种方式:XmlDocument,

假设有这么一个XML文件Book.XML

 <?xml version="1.0" encoding="utf-8"?>
 <bookstore>
   <!--记录书本的信息-->
   <book Type="必修课" ISBN="7-11-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>林美苏</author>
     <price>28.00</price>
   </book>
 </bookstore>

再定义一个BookModel类

 using System;
 using System.Collections.Generic;
 using System.Linq;
 using System.Text;

 namespace ConsoleTest
 {
     public class BookModel
     {
         public BookModel()
         {
         }

         private string bookType;
         public string BookType
         {
             get { return bookType; }
             set { bookType = value; }
         }

         private string bookISBN;
         public string BookISBN
         {
             get { return bookISBN; }
             set { bookISBN = value; }
         }

         private string bookName;
         public string BookName
         {
             get { return bookName; }
             set { bookName = value; }
         }

         private string bookAuthor;
         public string BookAuthor
         {
             get { return bookAuthor; }
             set { bookAuthor = value; }
         }

         private double bookPrice;
         public double BookPrice
         {
             get { return bookPrice; }
             set { bookPrice = value; }
         }
     }
 }

1. XmlDocument

分别演示了读取,增加,修改和删除

2. 用XmlTextReader和XmlTextWriter

XmlTextWriter要覆盖原来的文件,显得很麻烦,这里就不写了

 using System;
 using System.Collections.Generic;
 using System.Linq;
 using System.Text;
 using System.Xml;
 using System.Xml.Linq;

 namespace ConsoleTest
 {
     public class Program
     {
         static private void showXmlInfo(string path)
         {
             XmlDocument doc = new XmlDocument();
             XmlReaderSettings settings = new XmlReaderSettings();
             settings.IgnoreComments = true;
             XmlReader reader = XmlReader.Create(path, settings);
             doc.Load(reader);

             XmlNode xn = doc.DocumentElement;
             XmlNodeList xnl = xn.ChildNodes;
             List<BookModel> bookModelList = new List<BookModel>();
             foreach (XmlNode xmlNode in xnl)
             {
                 BookModel bookModel = new BookModel();
                 XmlElement xe = (XmlElement)xmlNode;
                 bookModel.BookISBN = xe.GetAttribute("ISBN").ToString();
                 bookModel.BookType = xe.GetAttribute("Type").ToString();
                 XmlNodeList xnlChild = xe.ChildNodes;
                 bookModel.BookName = xnlChild.Item().InnerText;
                 bookModel.BookAuthor = xnlChild.Item().InnerText;
                 bookModel.BookPrice = Convert.ToDouble(xnlChild.Item().InnerText);
                 bookModelList.Add(bookModel);
             }
             foreach (BookModel book in bookModelList)
             {
                 Console.WriteLine("Book ISBN: {0}   Type: {1}", book.BookISBN, book.BookType);
                 Console.WriteLine("\tBookName: {0}", book.BookName);
                 Console.WriteLine("\tBookAuthor: {0}", book.BookAuthor);
                 Console.WriteLine("\tBookPrice: {0}", book.BookPrice);
             }
             reader.Close();
         }

         static private void showXmlInfoByTextReader(string path)
         {
             XmlTextReader reader = new XmlTextReader(path);
             List<BookModel> modelList = new List<BookModel>();
             BookModel model = new BookModel();
             while (reader.Read())
             {
                 if (reader.NodeType == XmlNodeType.Element)
                 {
                     if (reader.Name == "book")
                     {
                         model.BookType = reader.GetAttribute();
                         model.BookISBN = reader.GetAttribute();
                     }
                     if (reader.Name == "title")
                     {
                         model.BookName = reader.ReadElementString().Trim();
                     }
                     if (reader.Name == "author")
                     {
                         model.BookAuthor = reader.ReadElementString().Trim();
                     }
                     if (reader.Name == "price")
                     {
                         model.BookPrice = Convert.ToDouble(reader.ReadElementString().Trim());
                     }
                 }
                 if (reader.NodeType == XmlNodeType.EndElement)
                 {
                     modelList.Add(model);
                     model = new BookModel();
                 }
             }
             modelList.RemoveAt(modelList.Count - );
             foreach (BookModel book in modelList)
             {
                 Console.WriteLine("Book ISBN: {0}   Type: {1}", book.BookISBN, book.BookType);
                 Console.WriteLine("\tBookName: {0}", book.BookName);
                 Console.WriteLine("\tBookAuthor: {0}", book.BookAuthor);
                 Console.WriteLine("\tBookPrice: {0}", book.BookPrice);
             }
             reader.Close();
         }

         static void Main(string[] args)
         {
             const string PATH = @"C:\Users\Administrator\Desktop\Demo\Book.XML";

             Console.WriteLine("Read by XmlDocument...\n");
             showXmlInfo(PATH);

             Console.WriteLine("\nRead by XmlTextReader...\n");
             showXmlInfoByTextReader(PATH);

             XmlDocument doc = new XmlDocument();
             doc.Load(PATH);
             XmlNode root = doc.DocumentElement;

             XmlElement xelKey = doc.CreateElement("book");
             xelKey.SetAttribute("Type", "选修课");
             xelKey.SetAttribute("ISBN", "7-111-19149-7");

             XmlElement xelTitle = doc.CreateElement("title");
             xelTitle.InnerText = "计算机算法与结构";
             XmlElement xelAuthor = doc.CreateElement("author");
             xelAuthor.InnerText = "程晓旭";
             XmlElement xelPrice = doc.CreateElement("price");
             xelPrice.InnerText = "50.00";
             xelKey.AppendChild(xelTitle);
             xelKey.AppendChild(xelAuthor);
             xelKey.AppendChild(xelPrice);

             root.AppendChild(xelKey);
             doc.Save(PATH);
             Console.WriteLine("\nApending one child by XmlDocument...\n");
             showXmlInfo(PATH);

             xelKey.GetElementsByTagName().InnerText = ".NET深入浅出";
             xelKey.GetElementsByTagName().InnerText = "冯小兵";
             xelKey.GetElementsByTagName().InnerText = "49.00";
             doc.Save(PATH);

             Console.WriteLine("\nEditting one child...\n");
             showXmlInfo(PATH);

             xelKey.ParentNode.RemoveChild(xelKey);
             doc.Save(PATH);
             Console.WriteLine("\nRemove one child...\n");
             showXmlInfo(PATH);
         }
     }
 }

用windowsForm的listBox来显示的时候

 using System;
 using System.Collections.Generic;
 using System.ComponentModel;
 using System.Data;
 using System.Drawing;
 using System.Linq;
 using System.Text;
 using System.Windows.Forms;
 using System.Xml;

 namespace WindowsTest
 {
     public partial class Form1 : Form
     {
         const string PATH = @"C:\Users\Administrator\Desktop\Demo\Book.XML";
         public Form1()
         {
             InitializeComponent();
         }

         private void Form1_Load(object sender, EventArgs e)
         {
             XmlDocument doc = new XmlDocument();
             doc.Load(PATH);
             RecurseXmlDocument((XmlNode)doc.DocumentElement, );
         }

         private void RecurseXmlDocument(XmlNode root, int indent)
         {
             if (root == null) return;
             if (root is XmlElement)
             {
                 listBox1.Items.Add(root.Name.PadLeft(root.Name.Length + indent));
                 if (root.HasChildNodes)
                 {
                     RecurseXmlDocument(root.FirstChild, indent + );
                 }

                 if (root.NextSibling != null)
                 {
                     RecurseXmlDocument(root.NextSibling, indent);
                 }

             }
             else if (root is XmlText)
             {
                 string text = ((XmlText)root).Value;
                 listBox1.Items.Add(text.PadLeft(text.Length + indent));
             }
         }
     }
 }

3. 用LINQ

3.0的新发现

 using System;
 using System.Collections.Generic;
 using System.Linq;
 using System.Text;
 using System.Xml;
 using System.Xml.Linq;

 namespace ConsoleTest
 {
     public class Program
     {
         static private void showXmlInfoByLinq(string path)
         {
             XElement xe = XElement.Load(path);
             IEnumerable<XElement> elements = from ele in xe.Elements("book")
                                              select ele;
             List<BookModel> modelList = new List<BookModel>();
             foreach (var ele in elements)
             {
                 BookModel model = new BookModel();
                 model.BookAuthor = ele.Element("author").Value;
                 model.BookName = ele.Element("title").Value;
                 model.BookPrice = Convert.ToDouble(ele.Element("price").Value);
                 model.BookISBN = ele.Attribute("ISBN").Value;
                 model.BookType = ele.Attribute("Type").Value;
                 modelList.Add(model);
             }
             foreach (BookModel book in modelList)
             {
                 Console.WriteLine("Book ISBN: {0}   Type: {1}", book.BookISBN, book.BookType);
                 Console.WriteLine("\tBookName: {0}", book.BookName);
                 Console.WriteLine("\tBookAuthor: {0}", book.BookAuthor);
                 Console.WriteLine("\tBookPrice: {0}", book.BookPrice);
             }
         }

         static void Main(string[] args)
         {
             const string PATH = @"C:\Users\Administrator\Desktop\Demo\Book.XML";

             Console.WriteLine("\nRead by XmlLinq...\n");
             showXmlInfoByLinq(PATH);

             XElement xe = XElement.Load(PATH);
             XElement record = new XElement(
                 new XElement("book",
                     new XAttribute("Type", "选修课"),
                     new XAttribute("ISBN", "7-111-19149-8"),
                     new XElement("title", "敏捷开发"),
                     new XElement("author", "秦朗"),
                     new XElement("price", 34.00)
                     )
                 );
             xe.Add(record);
             xe.Save(PATH);
             Console.WriteLine("\nApending one child by XmlLinq...\n");
             showXmlInfoByLinq(PATH);

             xe = XElement.Load(PATH);
             IEnumerable<XElement> element = from ele in xe.Elements("book")
                                             where ele.Attribute("ISBN").Value == "7-111-19149-8"
                                             select ele;
             )
             {
                 XElement first = element.First();
                 first.SetAttributeValue("Type", "必修课");
                 first.ReplaceNodes(
                     new XElement("title", "敏捷开发框架"),
                     new XElement("author", "秦明"),
                     new XElement("price", 35.00)
                     );
             }
             xe.Save(PATH);
             Console.WriteLine("\nEditting one child by XmlLinq...\n");
             showXmlInfoByLinq(PATH);

             xe = XElement.Load(PATH);
             IEnumerable<XElement> elements = from ele in xe.Elements("book")
                                              where ele.Attribute("ISBN").Value == "7-111-19149-8"
                                              select ele;
             )
             {
                 elements.First().Remove();
             }
             xe.Save(PATH);
             Console.WriteLine("\nRemoving one child by XmlLinq...\n");
             showXmlInfoByLinq(PATH);
         }
     }
 }

.NET: XML的更多相关文章

  1. XStream将java对象转换为xml时,对象字段中的下划线“_”,转换后变成了两个的解决办法

            在前几天的一个项目中,由于数据库字段的命名原因 其中有两项:一项叫做"市场价格"一项叫做"商店价格" 为了便于区分,遂分别将其命名为market ...

  2. .NET Core采用的全新配置系统[9]: 为什么针对XML的支持不够好?如何改进?

    物理文件是我们最常用到的原始配置的载体,最佳的配置文件格式主要由三种,它们分别是JSON.XML和INI,对应的配置源类型分别是JsonConfigurationSource.XmlConfigura ...

  3. WebApi接口 - 响应输出xml和json

    格式化数据这东西,主要看需要的运用场景,今天和大家分享的是webapi格式化数据,这里面的例子主要是输出json和xml的格式数据,测试用例很接近实际常用情况:希望大家喜欢,也希望各位多多扫码支持和点 ...

  4. XML技术之DOM4J解析器

    由于DOM技术的解析,存在很多缺陷,比如内存溢出,解析速度慢等问题,所以就出现了DOM4J解析技术,DOM4J技术的出现大大改进了DOM解析技术的缺陷. 使用DOM4J技术解析XML文件的步骤? pu ...

  5. UWP开发之Mvvmlight实践六:MissingMetadataException解决办法(.Net Native下Default.rd.xml配置问题)

    最近完成一款UWP应用,在手机端测试发布版(Release)的时候应用莫名奇妙的强行关闭,而同样的应用包在PC端一点问题都没有,而且Debug版在两个平台都没有问题,唯独手机的Release版有问题. ...

  6. PHP中遍历XML之SimpleXML

    简单来讲述一些XML吧,XML是可扩展标记语言,是一种用于标记电子文件使其具有结构性的标记语言.XML是当今用于传输数据的两大工具之一,另外一个是json. 我们在PHP中使用XML也是用来传输数据, ...

  7. Asp.Net 操作XML文件的增删改查 利用GridView

    不废话,直接上如何利用Asp.NET操作XML文件,并对其属性进行修改,刚开始的时候,是打算使用JS来控制生成XML文件的,但是最后却是无法创建文件,读取文件则没有使用了 index.aspx 文件 ...

  8. Mybatis XML配置

    Mybatis常用带有禁用缓存的XML配置 <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ...

  9. Drawable实战解析:Android XML shape 标签使用详解(apk瘦身,减少内存好帮手)

    Android XML shape 标签使用详解   一个android开发者肯定懂得使用 xml 定义一个 Drawable,比如定义一个 rect 或者 circle 作为一个 View 的背景. ...

  10. C#反序列化XML异常:在 XML文档(0, 0)中有一个错误“缺少根元素”

    Q: 在反序列化 Xml 字符串为 Xml 对象时,抛出如下异常. 即在 XML文档(0, 0)中有一个错误:缺少根元素. A: 首先看下代码: StringBuilder sb = new Stri ...

随机推荐

  1. find grep 组合使用

    1. 查找所有".h"文件 find /PATH -name "*.h" 2. 查找所有".h"文件中的含有"helloworld ...

  2. Tab指示符——Indicator

    先说说我们的思路吧. 其实思路也很简单,就是在咱们的导航下面画一个小矩形,不断的改变这个矩形距离左边的位置. 思路就这么简单,有了思路,接下来就是实现了,看代码: public class Indic ...

  3. HW 研发体系机构的几个术语

    PDT(product development team)产品开发团队   类似于产品经理 程序员 --  PL -- PM  --开发代表 -- PDT LEADER --------------- ...

  4. IE 的resize事件问题

    window的resize事件,真的让人无语! 我在动态设置元素的HTML内容后,窗口高度变化了,可是却不触发resize事件. 但是我在访问document.documentElement.scro ...

  5. php---分组函数group_concat()

    group_concat()函数总结 group_concat(),手册上说明:该函数返回带有来自一个组的连接的非NULL值的字符串结果.比较抽象,难以理解. 通俗点理解,其实是这样的:group_c ...

  6. iOS 调出storyboard里面起始Controller的箭头

    在storyboard里面,如果第一个ViewController不是默认的ViewController的时候,我们就需要拖拽一个出来. 如果把默认的ViewController删掉的话,前面的箭头, ...

  7. Windows-005-显示隐藏文件

    此文主要讲述如何设置 Win7 系统显示隐藏的文件.文件夹和驱动器,敬请亲们参阅.若有不足之处,敬请大神指正,不胜感激!详情如下: Win7 系统安装完成后,默认是不显示隐藏的文件.文件夹和驱动器的( ...

  8. jquery选择器效率优化问题

    jquery选择器效率优化问题   jquery选择器固然强大,但是使用不当回导致效率问题: 1.要养成将jQuery对象缓存进变量的习惯 //不好的写法 $('#btn').bind("c ...

  9. Android Error:warning: Ignoring InnerClasses attribute for an anonymous inner class

    今天项目发布时遇到了这个问题,在低版本设备上面死活发布不上去,还有打包也打不成功,折腾了好长一段时间,网上大部分给出的 解决方案都是说 在工程的混淆配置文件 proguard-rules.pro 中加 ...

  10. Ionic学习笔记四 一些问题处理

    版权声明:本文为博主原创文章,转载请留链接,非常感谢.   目录(?)[+]   IONIC actionsheet 的cancel menu在android下不显示的bug 在 _action-sh ...