C# 简单的XML读取修改写入

2023-05-16

  

XML概念
Root XML根节点,只能且必须有一个(以上为LinkLibrary)
Element 节点元素(如Link)
Attribute 节点属性(如Cat, Url, Desc)
Content 内容(非空白文本、CDATA、Element、EndElement、EntityReference 或 EndEntity)节点

System.Xml空间
以下类适合快速流式读写XML文件(注:DOM适合随机读写)
XmlReader, XmlWriter,
XmlTextReader, XmlTextWriter
XmlValidatingReader, XmlValidatingWriter 添加了DTD和模式验证,因此提供了数据的有效性验证
XmlNodeReader, XmlNodeWriter 把XmlNode作为其源

节点类型(public enum XmlNodeType)
XmlDeclaration XML 声明(例如,<?xml version="1.0"?>)。
Attribute 属性(例如,id="123")。
CDATA CDATA 节(例如,<![CDATA[my escaped text]]>)。
Comment 注释(例如,<!-- my comment -->)
Document 作为文档树的根的文档对象提供对整个 XML 文档的访问。
DocumentFragment 文档片段。
DocumentType 由以下标记指示的文档类型声明(例如,<!DOCTYPE...>)。
Element 元素(例如,<item>)。
EndElement 末尾元素标记(例如,</item>)。
Entity 实体声明(例如,<!ENTITY...>)。
EndEntity 由于调用 ResolveEntity 而使 XmlReader 到达实体替换的末尾时返回。
EntityReference 实体引用(例如,&num;)。
None 如果未调用 Read 方法,则由 XmlReader 返回。
Notation 文档类型声明中的表示法(例如,<!NOTATION...>)。
ProcessingInstruction 处理指令(例如,<?pi test?>)。
SignificantWhitespace 混合内容模型中标记间的空白或 xml:space="preserve" 范围内的空白。
Text 节点的文本内容。
Whitespace 标记间的空白。


 ------------------------------------------------------------------------
使用XmlTextWriter快速写入
------------------------------------------------------------------------
开闭
XmlTextWriter writer = new XmlTextWriter(@"c:/mywriter.xml", null);
writer.Close();

起止XML文档 (<?xml version="1.0"?>
writer.WriteStartDocument();
writer.EndDocument();

声明XML格式
writer.Formatting = Formatting.Indented;
writer.Indentation = 缩进字符数
writer.IndentChar = 缩进字符
writer.QuoteChar = 单引号|双引号

输出注释 (<!-- comment text -->)
writer.WriteComment("comment text");

输出元素 (<Element>ElementVal</Element>)
writer.WriteElementString("Element", "ElementVal");
或者
writer.StartElement("Element");
writer.WriteString("ElementVal");
writer.EndElement();

输出元素属性 (<Element Property="PropertyVal">ElementVal</Element>)
writer.StartElement("Element");
writer.WriteAttributeString("Property", "PropertyVal");
writer.WriteString("ElementVal");
writer.EndElement();

输出CDATA (<!CDATA>....</CDATA>
WriteCData("....")

输出字符缓冲区文本
WriteChars(char[], startPos, length)

 

  已知有一个XML文件(bookstore.xml)如下:

 

<?xml version="1.0" encoding="gb2312"?>
<bookstore>
  <book genre="fantasy" ISBN="2-3631-4">
    <title>Oberon's Legacy</title>
    <author>Corets, Eva</author>
    <price>5.95</price>
  </book>
</bookstore>


 
  1、往<bookstore>节点中插入一个<book>节点:

 

   XmlDocument xmlDoc=new XmlDocument();
   xmlDoc.Load("bookstore.xml");
   XmlNode root=xmlDoc.SelectSingleNode("bookstore");//查找<bookstore>
   XmlElement xe1=xmlDoc.CreateElement("book");//创建一个<book>节点
   xe1.SetAttribute("genre","李赞红");//设置该节点genre属性
   xe1.SetAttribute("ISBN","2-3631-4");//设置该节点ISBN属性
 
   XmlElement xesub1=xmlDoc.CreateElement("title");
   xesub1.InnerText="CS从入门到精通";//设置文本节点
   xe1.AppendChild(xesub1);//添加到<book>节点中
   XmlElement xesub2=xmlDoc.CreateElement("author");
   xesub2.InnerText="候捷";
   xe1.AppendChild(xesub2);
   XmlElement xesub3=xmlDoc.CreateElement("price");
   xesub3.InnerText="58.3";
   xe1.AppendChild(xesub3);
 
   root.AppendChild(xe1);//添加到<bookstore>节点中
   xmlDoc.Save("bookstore.xml");


  //================
  结果为:

 

<?xml version="1.0" encoding="gb2312"?>
<bookstore>
  <book genre="fantasy" ISBN="2-3631-4">
    <title>Oberon's Legacy</title>
    <author>Corets, Eva</author>
    <price>5.95</price>
  </book>
  <book genre="李赞红" ISBN="2-3631-4">
    <title>CS从入门到精通</title>
    <author>候捷</author>
    <price>58.3</price>
  </book>
</bookstore>


2、修改节点:将genre属性值为“李赞红“的节点的genre值改为“update李赞红”,将该节点的子节点<author>的文本修改为“亚胜”。

 

    XmlNodeList nodeList=xmlDoc.SelectSingleNode("bookstore").ChildNodes;//获取bookstore节点的所有子节点
   foreach(XmlNode xn in nodeList)//遍历所有子节点
   {
    XmlElement xe=(XmlElement)xn;//将子节点类型转换为XmlElement类型
    if(xe.GetAttribute("genre")=="李赞红")//如果genre属性值为“李赞红”
    {
     xe.SetAttribute("genre","update李赞红");//则修改该属性为“update李赞红”
 
     XmlNodeList nls=xe.ChildNodes;//继续获取xe子节点的所有子节点
     foreach(XmlNode xn1 in nls)//遍历
     {
      XmlElement xe2=(XmlElement)xn1;//转换类型
      if(xe2.Name=="author")//如果找到
      {
       xe2.InnerText="亚胜";//则修改
       break;//找到退出来就可以了
      }
     }
     break;
    }
   }
 
   xmlDoc.Save("bookstore.xml");//保存。



  //=================

  最后结果为:

 

<?xml version="1.0" encoding="gb2312"?>
<bookstore>
  <book genre="fantasy" ISBN="2-3631-4">
    <title>Oberon's Legacy</title>
    <author>Corets, Eva</author>
    <price>5.95</price>
  </book>
  <book genre="update李赞红" ISBN="2-3631-4">
    <title>CS从入门到精通</title>
    <author>亚胜</author>
    <price>58.3</price>
  </book>
</bookstore>


 
  3、删除 <book genre="fantasy" ISBN="2-3631-4">节点的genre属性,删除 <book genre="update李赞红" ISBN="2-3631-4">节点。

 

XmlNodeList xnl=xmlDoc.SelectSingleNode("bookstore").ChildNodes;
 
   foreach(XmlNode xn in xnl)
   {
    XmlElement xe=(XmlElement)xn;


   if(xe.GetAttribute("genre")=="fantasy")
    {
     xe.RemoveAttribute("genre");//删除genre属性
    }
    else if(xe.GetAttribute("genre")=="update李赞红")
    {
     xe.RemoveAll();//删除该节点的全部内容
    }
   }
   xmlDoc.Save("bookstore.xml");

  //====================
 
  最后结果为:

 <?xml version="1.0" encoding="gb2312"?>
<bookstore>
  <book ISBN="2-3631-4">
    <title>Oberon's Legacy</title>
    <author>Corets, Eva</author>
    <price>5.95</price>
  </book>
  <book>
  </book>
</bookstore>

 
  4、显示所有数据。

 

 XmlNode xn=xmlDoc.SelectSingleNode("bookstore");
 
   XmlNodeList xnl=xn.ChildNodes;
  
   foreach(XmlNode xnf in xnl)
   {
    XmlElement xe=(XmlElement)xnf;
    Console.WriteLine(xe.GetAttribute("genre"));//显示属性值
    Console.WriteLine(xe.GetAttribute("ISBN"));
 
    XmlNodeList xnf1=xe.ChildNodes;
    foreach(XmlNode xn2 in xnf1)
    {
     Console.WriteLine(xn2.InnerText);//显示子节点点文本
    }
   }

 

 

------------------------------------------------------------------------
写例程
------------------------------------------------------------------------

[c-sharp] view plain copy print ?
  1. XmlTextWriter writer = new XmlTextWriter (filename, null);  
  2. //Use indenting for readability.  
  3. writer.Formatting = Formatting.Indented;  
  4. //xml声明(Write the XML delcaration. )  
  5. writer.WriteStartDocument();  
  6. //预处理指示(Write the ProcessingInstruction node.)  
  7. String PItext="type="text/xsl" href="book.xsl"";  
  8. writer.WriteProcessingInstruction("xml-stylesheet", PItext);  
  9. //文档类型(Write the DocumentType node.)  
  10. writer.WriteDocType("book"null , null"<!ENTITY h "hardcover">");  
  11. //注释(Write a Comment node.)  
  12. writer.WriteComment("sample XML");  
  13. //根元素(Write a root element.)  
  14. writer.WriteStartElement("book");  
  15. //属性值(Write the genre attribute.)  
  16. writer.WriteAttributeString("genre""novel");  
  17. //属性值(Write the ISBN attribute.)  
  18. writer.WriteAttributeString("ISBN""1-8630-014");  
  19. //Write the title.  
  20. writer.WriteElementString("title""The Handmaid"s Tale");  
  21. //Write the style element.  
  22. writer.WriteStartElement("style");  
  23. writer.WriteEntityRef("h");  
  24. writer.WriteEndElement();   
  25. //文本元素节点(Write the price.)  
  26. writer.WriteElementString("price""19.95");  
  27. //[CDATA]  
  28. writer.WriteCData("Prices 15% off!!");  
  29. //Write the close tag for the root element.  
  30. writer.WriteEndElement();  
  31. writer.WriteEndDocument();  
  32. //Write the XML to file and close the writer.  
  33. writer.Flush();  
  34. writer.Close();   
  35. //Load the file into an XmlDocument to ensure well formed XML.  
  36. XmlDocument doc = new XmlDocument();  
  37. //Preserve white space for readability.  
  38. doc.PreserveWhitespace = true;  
  39. //Load the file.  
  40. doc.Load(filename);   
  41. //Display the XML content to the console.  
  42. Console.Write(doc.InnerXml);   
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

C# 简单的XML读取修改写入 的相关文章

随机推荐

  • s32ds

    S32DS使用复位窗口的方式还原 xff1a 在S32DS菜单栏 Windows Perspective Reset Perspective 添加组件 xff0c 自动生成代码 xff1a
  • 在C#中使用SerialPort类实现串口通信 遇到多线程问题

    在C 中使用SerialPort类实现串口通信 遇到多线程问题 在C 中使用SerialPort类实现串口通信 2009年11月01日 星期日 10 03 在 NET work 2 0中提供了SerialPort类 xff0c 该类主要实现
  • [C#]委托和事件(详细讲解)

    引言 委托 和 事件在 Net Framework中的应用非常广泛 xff0c 然而 xff0c 较好地理解委托和事件对很多接触C 时间不长的人来说并不容易 它们就像是一道槛儿 xff0c 过了这个槛的人 xff0c 觉得真是太容易了 xf
  • 连接excel执行Insert Into语句出现“操作必须使用一个可更新的查询”的解决

    C 使用oledb连接excel执行Insert Into语句出现 操作必须使用一个可更新的查询 的解决办法 我发生错误时的环境 xff1a Windows 7 xff0c Framework 4 0 xff0c Microsoft Off
  • 操作excel的一些方法

    更改方法 xff1a public void UpdateExcelFile string filePath string prjId List lt string gt updateColNames List lt string gt c
  • C#中如何创建文件夹

    C 中对文件夹操作需要用到Directory Class 其中提供了创建 删除 移动 枚举等静态方法 该类不能被继承 以下代码实现了创建文件夹 1 2 3 4 if Directory Exists sPath
  • C#获取当前程序运行路径的方法集合

    获取当前进程的完整路径 xff0c 包含文件名 进程名 string str 61 this GetType Assembly Location result X xxx xxx xxx exe exe文件所在的目录 43 exe文件名 获
  • 怎么将excel数据导入到datagridview中

    本人小白 xff0c 想要实现EXCEL文件中的数据导入到datagridview中 xff0c EXCEL中的数据是多行多列 xff0c 行数和列数不确定 xff0c 如何实现导入到datagridview中显示 xff0c 具体的界面如
  • 总结了C#中string.format用法。分享给大家供大家参考。具体分析如下:

    String Format 方法的几种定义 xff1a String Format String Object 将指定的 String 中的格式项替换为指定的 Object 实例的值的文本等效项 String Format String O
  • c#中out、ref和params的用法与区别

    ref和out都对函数参数采用引用传递形式 不管是值类型参数还是引用类型参数 xff0c 并且定义函数和调用函数时都必须显示生命该参数为 ref out形式 两者都可以使函数传回多个结果 两者区别 xff1a 两种参数类型的设计思想不同 x
  • C#代码创建Xml文件

    扩展标记语言XML xff08 eXtensible Markup Language xff09 xff0c 是由W3C组织制定的 做为用于替代HTML语言的一种新型的标记语言 xff0c XML内部有着很多基本标准 xff0c XML就是
  • tftp使用

    tftp服务器路径 xff1a tftp使用命令 xff1a root 64 iTOP 4412 tftp g l module test ko 169 254 231 181 3356 761790 dm96 TxRound 0 for
  • 获取某一扩展名的文件集合

    获取某一扩展名的文件集合 lt summary gt lt param name 61 34 dictoryName 34 gt 目录名 lt param gt lt param name 61 34 fiterName 34 gt 扩展名
  • 使用XmlTextWriter生成XML文件的方法

    使用XmlTextWriter生成XML文件的方法 项目兼容需要生成一系列的xml文件 xff0c 总结了下XML文件的生成基本方式 项目兼容需要生成一系列的xml文件 xff0c 总结了下XML文件的生成基本方式 XmlTextWrite
  • datatable数据类型方法

    本文章已收录于 xff1a 43 Datatable数据类型介绍 简介方法介绍 用法一声明一个datatable类型用法二合并两个结构相同的datatable用法三datatable中数据的计算用法四两种遍历datatable的方法 Dat
  • C#字符串常见操作总结详解

    C 字符串常见操作总结详解 本篇文章是对C 中字符串的常见操作进行了详细的总结介绍 xff0c 需要的朋友参考下 xff08 1 xff09 取字符串长度 lt string gt Length xff08 2 xff09 字符串转为比特码
  • c#读取string类型的xml格式的字符串

    string str 61 lt resultInfo code 61 34 202 34 message 61 34 原密码输入不正确 xff01 34 gt XmlDocument xmlDoc 61 new XmlDocument x
  • C# 截取字符串

    本文章已收录于 xff1a str为要进行截取的字符串 start是第一个关键字 字符串 last是第二个关键字 字符串 public string GetContent string str string start string las
  • C#中文件及文件夾的遍历

    操作文件常用的类有 xff1a File 实用类 xff0c 提供许多静态方法 xff0c 用于移动 删除 和复制文件 Directory 实用类 xff0c 提供许多静态方法 xff0c 用于移动 删除和复制目录 Path 实用类 xff
  • C# 简单的XML读取修改写入

    XML概念 Root XML根节点 xff0c 只能且必须有一个 以上为LinkLibrary Element 节点元素 如Link Attribute 节点属性 如Cat Url Desc Content 内容 xff08 非空白文本 C