c#操作XML

简介:




要添加的命名空间为 System.Xml

第一章 在内存里建立Xml对象

有时候我们可能需要根据数据库里的数据值生成Xml文件,那么,我们就要在内存里先建立Xml对象,之后再将Xml对象以字符串或文件的形式输出。首先来看看怎么用.Net下的类所提供的方法来生成Xml的各部分

假设一软件商买如下游戏:文明3,帝国时代

那么以下代码将生成如下的Xml文档

       <?xml version="1.0" encoding="utf-8" ?>
          <v:Games xmlns:v="www-shop-game">
              <v:Game name="文明3">
                  <Price>100</Price>
              </Game>
              <v:Game name="帝国时代">
                  <Price>200</Price>
              </Game>
          </Games>

view plaincopy to clipboardprint?
XmlDocument xml = new XmlDocument();                        //建立XmlDomcument对象   
                   
XmlDeclaration Declaration = xml.CreateXmlDeclaration("1.0", "utf-8", null);    //Xml Declaration(Xml声明)   
  
XmlNode RootNode = xml.CreateNode(XmlNodeType.Element,"v","Games","www-microsoft-game");   
  
xml.AppendChild(RootNode);   
  
XmlNode node1 = xml.CreateNode(XmlNodeType.Element, "v", "Game", "www-microsoft-game");   
  
RootNode.AppendChild(node1);   
  
node1.Attributes.Append(xml.CreateAttribute("name")).InnerText = "文明3";   
node1.AppendChild(xml.CreateNode(XmlNodeType.Element,"Price",null)).InnerText = "100";   
  
XmlNode node2 = xml.CreateNode(XmlNodeType.Element, "v", "Game", "www-microsoft-game");   
  
RootNode.AppendChild(node2);   
  
node2.Attributes.Append(xml.CreateAttribute("name")).InnerText = "帝国时代";   
node2.AppendChild(xml.CreateNode(XmlNodeType.Element, "Price", null)).InnerText = "300";   
  
xml.InsertBefore(Declaration, xml.DocumentElement);  
        XmlDocument xml = new XmlDocument();                        //建立XmlDomcument对象
                        
        XmlDeclaration Declaration = xml.CreateXmlDeclaration("1.0", "utf-8", null);    //Xml Declaration(Xml声明)

        XmlNode RootNode = xml.CreateNode(XmlNodeType.Element,"v","Games","www-microsoft-game");

        xml.AppendChild(RootNode);

        XmlNode node1 = xml.CreateNode(XmlNodeType.Element, "v", "Game", "www-microsoft-game");

        RootNode.AppendChild(node1);

        node1.Attributes.Append(xml.CreateAttribute("name")).InnerText = "文明3";
        node1.AppendChild(xml.CreateNode(XmlNodeType.Element,"Price",null)).InnerText = "100";

        XmlNode node2 = xml.CreateNode(XmlNodeType.Element, "v", "Game", "www-microsoft-game");

        RootNode.AppendChild(node2);

        node2.Attributes.Append(xml.CreateAttribute("name")).InnerText = "帝国时代";
        node2.AppendChild(xml.CreateNode(XmlNodeType.Element, "Price", null)).InnerText = "300";
  
        xml.InsertBefore(Declaration, xml.DocumentElement);

以上虽是一个很简单的Xml文档,但万变不离其中,只要掌握了方法,再复杂的Xml串也可以拼出来。

第二章 读取Xml文档的值 

如果我们有现成的Xml文档,那么,我们怎么取到我们感兴趣的值呢?
 
还是以上边的文档为例,我们看到根节点下边有两个节点,它们的名字都是Game,那么用节点的名称,我们是无法分辨出哪一个节点是“文明3”,哪一个节点是“帝国时代”的!!!那么,当我想知道“文明3”的价格时,就应该使用Xml文档对象下的SelectSingleNode方法。这个方法有两个重载的版本,一个是当Xml文档没有命名空间时使用的,一个参数SelectSingleNode(string xpath)直接传入xpath即可,另一个是当Xml文档有命名空间时使用的,两个参数:SelelctSingleNode(string xpath,XmlNamespaceManager nsmgr),第一个参数还是xpath,第二个参数是XmlNamespaceManager对象,由于我们的Xml是有命名空间的,所以我们要使用第二种方法!首先我们要建立一个XmlNamespaceManager对象,建立的方法为

XmlNamespaceManager nsmgr = new XmlNamespaceManager(new XmlDocument().NameTable);

建立完对象后,我们就要开始为nsmgr增加我们的命名空间了(注意,这里加的命名空间要与Xml实际的相对应,但前辍名可不同),增加的方法如下:
 
nsmgr.AddNamespace("v","www-shop-game")

好了,准备工作完成了,现在可以使用SelectSingleNode方法了
  
string price = xml.SelectSingleNode("v:Games/v:Game[@name='文明3']/Price",nsmgr).InnerText

请注意,如果Xml文档里没有明确指出当前节点的命名空间,那么当前节点的命名空间继承其父节点的命名空间

假设我们刚才生成的Xml文档已存在D:\Xml目录下了,文件的名字就叫sellgame.xml,完整的代码如下:

view plaincopy to clipboardprint?
XmlDocument xml = new XmlDocument();   
xml.Load("D:\\Xml\\sellgame.xml")   
XmlNamespaceManager nsmgr = new XmlNamespaceManager(new XmlDocument().NameTable); //建立Xml命名空间管理器对象   
nsmgr.AddNamespace("v","www-shop-game");                            //增加命名空间   
string price = xml.SelectSingleNode("v:Games/v:Game[@name='文明3']/Price",nsmgr).InnerText;//取得相应的节点值  
XmlDocument xml = new XmlDocument();
xml.Load("D:\\Xml\\sellgame.xml")
XmlNamespaceManager nsmgr = new XmlNamespaceManager(new XmlDocument().NameTable); //建立Xml命名空间管理器对象
nsmgr.AddNamespace("v","www-shop-game");                            //增加命名空间
string price = xml.SelectSingleNode("v:Games/v:Game[@name='文明3']/Price",nsmgr).InnerText;//取得相应的节点值

现在,如果这家软件经销商加增加一种新的产品:文明3的典藏版!那么我们的Xml文档就要进行相应的扩充了:

           <?xml version="1.0" encoding="utf-8" ?>
           <v:Games xmlns:v="www-shop-game">
               <v:Game name="文明3" type="standard">
                   <Price>100</Price>
               </Game>
               <v:Game name="文明3" type="classic"> 
                   <Price>500</Price>
               </Game>
               <v:Game name="帝国时代">
                   <Price>200</Price>
               </Game>
           </Games>

这时当我们想要取到全部与“文明3”有关的节点时,该如何进行呢?我们可以使用SelectNodes方法

该方法大体上与SelectSingleNode方法一样,也是两次重载,但此方法返回一个XmlNodeList对象,即一个XmlNode数组

当我们想要取到全部与“文明3”有关的节点时,可以这样:

view plaincopy to clipboardprint?
XmlNamespaceManager nsmgr = new XmlNamespaceManager(new XmlDocument().NameTable);    //建立Xml命名空间管理器对象   
  
nsmgr.AddNamespace("v","www-shop-game");                        //增加命名空间   
  
XmlNodeList nodeList = xml.SelectNodes("v:Games/v:Game[@name='文明3']/Price",nsmgr);    //取得相应的节点数组      
XmlNamespaceManager nsmgr = new XmlNamespaceManager(new XmlDocument().NameTable);    //建立Xml命名空间管理器对象

nsmgr.AddNamespace("v","www-shop-game");                        //增加命名空间

XmlNodeList nodeList = xml.SelectNodes("v:Games/v:Game[@name='文明3']/Price",nsmgr);    //取得相应的节点数组    
 

当我们要取节点的属性值及节点的值时,都可以使用InnerText这个属性




本文转自94cool博客园博客,原文链接:http://www.cnblogs.com/94cool/articles/1535517.html,如需转载请自行联系原作者

相关文章
|
9月前
|
XML C# 数据格式
使用C#操作XML文件
使用C#操作XML文件
|
9月前
|
XML Java 开发工具
jdom操作xml实战
jdom操作xml实战
|
5月前
|
XML JSON 数据处理
C# 中的 XML 与 JSON 数据处理
在现代软件开发中,数据交换和存储需求日益增长,XML 和 JSON 成为最常用的数据格式。本文从 C# 角度出发,详细介绍如何处理这两种格式,并提供示例代码。对于 XML,我们介绍了读取、创建和写入 XML 文件的方法;对于 JSON,则展示了如何使用 Newtonsoft.Json 库进行数据解析和序列化。此外,文章还总结了常见问题及其解决方案,帮助开发者更好地应对实际项目中的挑战。
223 61
C# 中的 XML 与 JSON 数据处理
|
8月前
|
XML Java 数据格式
Spring5系列学习文章分享---第一篇(概述+特点+IOC原理+IOC并操作之bean的XML管理操作)
Spring5系列学习文章分享---第一篇(概述+特点+IOC原理+IOC并操作之bean的XML管理操作)
58 1
|
4月前
|
XML 存储 缓存
C#使用XML文件的详解及示例
C#使用XML文件的详解及示例
196 0
|
4月前
|
XML JSON 前端开发
C#使用HttpClient四种请求数据格式:json、表单数据、文件上传、xml格式
C#使用HttpClient四种请求数据格式:json、表单数据、文件上传、xml格式
920 0
|
9月前
|
XML 存储 C#
C# xml文档反序列化记事
本文介绍了使用XmlSerializer进行XML序列化和反序列化的关键点。包括:1) 以独占方式读取XML文件以避免并发问题;2) 当元素名与类型名不一致时,可通过`[XmlArrayItem]`指定元素名,或创建继承自原始类型的子类;3) 处理DateTime反序列化错误,通过中间字符串属性转换;4) 提到了常用C#特性如`[XmlRoot]`, `[XmlElement]`, `[XmlAttribute]`, `[XmlIgnore]`和`[XmlArrayItem]`的作用。
|
9月前
|
XML C# 数据格式
C# 解析XML文件
C# 解析XML文件
110 1
|
9月前
|
XML 存储 JSON
c#XML、JSON的序列化和反序列化,看完你就懂了
c#XML、JSON的序列化和反序列化,看完你就懂了
250 0
|
9月前
|
XML 开发框架 .NET
C# .NET面试系列八:ADO.NET、XML、HTTP、AJAX、WebService
## 第二部分:ADO.NET、XML、HTTP、AJAX、WebService #### 1. .NET 和 C# 有什么区别? .NET(通用语言运行时): ```c# 定义:.NET 是一个软件开发框架,提供了一个通用的运行时环境,用于在不同的编程语言中执行代码。 作用:它为多语言支持提供了一个统一的平台,允许不同的语言共享类库和其他资源。.NET 包括 Common Language Runtime (CLR)、基础类库(BCL)和其他工具。 ``` C#(C Sharp): ```c# 定义: C# 是一种由微软设计的面向对象的编程语言,专门为.NET 平台开发而创建。 作
374 2