当前位置: 首页 > 编程日记 > 正文

在C#.net中如何操作XML

在C#.net中如何操作XML
需要添加的命名空间:
using System.Xml;

定义几个公共对象:
XmlDocument xmldoc ;
XmlNode xmlnode ;
XmlElement xmlelem ;

1,创建到服务器同名目录下的xml文件:

方法一:
xmldoc = new XmlDocument ( ) ;
//加入XML的声明段落
xmlnode = xmldoc.CreateNode ( XmlNodeType.XmlDeclaration , "" , "" ) ;
xmldoc.AppendChild ( xmlnode ) ;
//加入一个根元素
xmlelem = xmldoc.CreateElement ( "" , "Employees" , "" ) ;
xmldoc.AppendChild ( xmlelem ) ;
//加入另外一个元素
for(int i=1;i<3;i++)
{

XmlNode root=xmldoc.SelectSingleNode("Employees");//查找<Employees>
XmlElement xe1=xmldoc.CreateElement("Node");//创建一个<Node>节点
xe1.SetAttribute("genre","李赞红");//设置该节点genre属性
xe1.SetAttribute("ISBN","2-3631-4");//设置该节点ISBN属性

XmlElement xesub1=xmldoc.CreateElement("title");
xesub1.InnerText="CS从入门到精通";//设置文本节点
xe1.AppendChild(xesub1);//添加到<Node>节点中
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);//添加到<Employees>节点中
}
//保存创建好的XML文档
xmldoc.Save ( Server.MapPath("data.xml") ) ;

//
结果:在同名目录下生成了名为data.xml的文件,内容如下,
<?xml version="1.0"?>
<Employees>
  <Node genre="李赞红" ISBN="2-3631-4">
    <title>CS从入门到精通</title>
    <author>候捷</author>
    <price>58.3</price>
  </Node>
  <Node genre="李赞红" ISBN="2-3631-4">
    <title>CS从入门到精通</title>
    <author>候捷</author>
    <price>58.3</price>
  </Node>
</Employees>

方法二:
XmlTextWriter xmlWriter;
   string strFilename = Server.MapPath("data1.xml") ;

xmlWriter = new XmlTextWriter(strFilename,Encoding.Default);//创建一个xml文档
   xmlWriter.Formatting = Formatting.Indented;
   xmlWriter.WriteStartDocument();
   xmlWriter.WriteStartElement("Employees");

xmlWriter.WriteStartElement("Node");
   xmlWriter.WriteAttributeString("genre","李赞红");
   xmlWriter.WriteAttributeString("ISBN","2-3631-4");

xmlWriter.WriteStartElement("title");
   xmlWriter.WriteString("CS从入门到精通");
   xmlWriter.WriteEndElement();

xmlWriter.WriteStartElement("author");
   xmlWriter.WriteString("候捷");
   xmlWriter.WriteEndElement();

xmlWriter.WriteStartElement("price");
   xmlWriter.WriteString("58.3");
   xmlWriter.WriteEndElement();

xmlWriter.WriteEndElement();

xmlWriter.Close();
//
结果:
<?xml version="1.0" encoding="gb2312"?>
<Employees>
  <Node genre="李赞红" ISBN="2-3631-4">
    <title>CS从入门到精通</title>
    <author>候捷</author>
    <price>58.3</price>
  </Node>
</Employees>

2,添加一个结点:

XmlDocument xmlDoc=new XmlDocument();
xmlDoc.Load(Server.MapPath("data.xml"));
XmlNode root=xmlDoc.SelectSingleNode("Employees");//查找<Employees>
XmlElement xe1=xmlDoc.CreateElement("Node");//创建一个<Node>节点
xe1.SetAttribute("genre","张三");//设置该节点genre属性
xe1.SetAttribute("ISBN","1-1111-1");//设置该节点ISBN属性

XmlElement xesub1=xmlDoc.CreateElement("title");
xesub1.InnerText="C#入门帮助";//设置文本节点
xe1.AppendChild(xesub1);//添加到<Node>节点中
XmlElement xesub2=xmlDoc.CreateElement("author");
xesub2.InnerText="高手";
xe1.AppendChild(xesub2);
XmlElement xesub3=xmlDoc.CreateElement("price");
xesub3.InnerText="158.3";
xe1.AppendChild(xesub3);

root.AppendChild(xe1);//添加到<Employees>节点中
xmlDoc.Save ( Server.MapPath("data.xml") );

//
结果:在xml原有的内容里添加了一个结点,内容如下,
<?xml version="1.0"?>
<Employees>
  <Node genre="李赞红" ISBN="2-3631-4">
    <title>CS从入门到精通</title>
    <author>候捷</author>
    <price>58.3</price>
  </Node>
  <Node genre="李赞红" ISBN="2-3631-4">
    <title>CS从入门到精通</title>
    <author>候捷</author>
    <price>58.3</price>
  </Node>
  <Node genre="张三" ISBN="1-1111-1">
    <title>C#入门帮助</title>
    <author>高手</author>
    <price>158.3</price>
  </Node>
</Employees>

3,修改结点的值(属性和子结点):

XmlDocument xmlDoc=new XmlDocument();
xmlDoc.Load( Server.MapPath("data.xml") );

XmlNodeList nodeList=xmlDoc.SelectSingleNode("Employees").ChildNodes;//获取Employees节点的所有子节点

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="亚胜";//则修改
}
}
}
}
xmlDoc.Save( Server.MapPath("data.xml") );//保存。

//
结果:将原来的所有结点的信息都修改了,xml的内容如下,
<?xml version="1.0"?>
<Employees>
  <Node genre="李赞红" ISBN="2-3631-4">
    <title>CS从入门到精通</title>
    <author>候捷</author>
    <price>58.3</price>
  </Node>
  <Node genre="李赞红" ISBN="2-3631-4">
    <title>CS从入门到精通</title>
    <author>候捷</author>
    <price>58.3</price>
  </Node>
  <Node genre="update张三" ISBN="1-1111-1">
    <title>C#入门帮助</title>
    <author>亚胜</author>
    <price>158.3</price>
  </Node>
</Employees>

4,修改结点(添加结点的属性和添加结点的自结点):
XmlDocument xmlDoc=new XmlDocument();
xmlDoc.Load( Server.MapPath("data.xml") );

XmlNodeList nodeList=xmlDoc.SelectSingleNode("Employees").ChildNodes;//获取Employees节点的所有子节点

foreach(XmlNode xn in nodeList)
{
XmlElement xe=(XmlElement)xn;
xe.SetAttribute("test","111111");

XmlElement xesub=xmlDoc.CreateElement("flag");
xesub.InnerText="1";
xe.AppendChild(xesub);
}
xmlDoc.Save( Server.MapPath("data.xml") );

//
结果:每个结点的属性都添加了一个,子结点也添加了一个,内容如下,
<?xml version="1.0"?>
<Employees>
  <Node genre="李赞红" ISBN="2-3631-4" test="111111">
    <title>CS从入门到精通</title>
    <author>候捷</author>
    <price>58.3</price>
    <flag>1</flag>
  </Node>
  <Node genre="李赞红" ISBN="2-3631-4" test="111111">
    <title>CS从入门到精通</title>
    <author>候捷</author>
    <price>58.3</price>
    <flag>1</flag>
  </Node>
  <Node genre="update张三" ISBN="1-1111-1" test="111111">
    <title>C#入门帮助</title>
    <author>亚胜</author>
    <price>158.3</price>
    <flag>1</flag>
  </Node>
</Employees>

5,删除结点中的某一个属性:
XmlDocument xmlDoc=new XmlDocument();
xmlDoc.Load( Server.MapPath("data.xml") );
XmlNodeList xnl=xmlDoc.SelectSingleNode("Employees").ChildNodes;
foreach(XmlNode xn in xnl)
{
XmlElement xe=(XmlElement)xn;
xe.RemoveAttribute("genre");//删除genre属性

XmlNodeList nls=xe.ChildNodes;//继续获取xe子节点的所有子节点
foreach(XmlNode xn1 in nls)//遍历
{
XmlElement xe2=(XmlElement)xn1;//转换类型
if(xe2.Name=="flag")//如果找到
{
xe.RemoveChild(xe2);//则删除
}
}
}
xmlDoc.Save( Server.MapPath("data.xml") );

//]
结果:删除了结点的一个属性和结点的一个子结点,内容如下,
<?xml version="1.0"?>
<Employees>
  <Node ISBN="2-3631-4" test="111111">
    <title>CS从入门到精通</title>
    <author>候捷</author>
    <price>58.3</price>
  </Node>
  <Node ISBN="2-3631-4" test="111111">
    <title>CS从入门到精通</title>
    <author>候捷</author>
    <price>58.3</price>
  </Node>
  <Node ISBN="1-1111-1" test="111111">
    <title>C#入门帮助</title>
    <author>亚胜</author>
    <price>158.3</price>
  </Node>
</Employees>

6,删除结点:
XmlDocument xmlDoc=new XmlDocument();
xmlDoc.Load( Server.MapPath("data.xml") );
XmlNode root=xmlDoc.SelectSingleNode("Employees");
XmlNodeList xnl=xmlDoc.SelectSingleNode("Employees").ChildNodes;
for(int i=0;i<xnl.Count;i++)
{
XmlElement xe=(XmlElement)xnl.Item(i);
if(xe.GetAttribute("genre")=="张三")
{
root.RemoveChild(xe);
if(i<xnl.Count)i=i-1;
}
}
xmlDoc.Save( Server.MapPath("data.xml") );

//]
结果:删除了符合条件的所有结点,原来的内容:

<?xml version="1.0"?>
<Employees>
  <Node genre="李赞红" ISBN="2-3631-4">
    <title>CS从入门到精通</title>
    <author>候捷</author>
    <price>58.3</price>
  </Node>
  <Node genre="李赞红" ISBN="2-3631-4">
    <title>CS从入门到精通</title>
    <author>候捷</author>
    <price>58.3</price>
  </Node>
  <Node genre="张三" ISBN="1-1111-1">
    <title>C#入门帮助</title>
    <author>高手</author>
    <price>158.3</price>
  </Node>
  <Node genre="张三" ISBN="1-1111-1">
    <title>C#入门帮助</title>
    <author>高手</author>
    <price>158.3</price>
  </Node>
</Employees>

删除后的内容:
<?xml version="1.0"?>
<Employees>
  <Node genre="李赞红" ISBN="2-3631-4">
    <title>CS从入门到精通</title>
    <author>候捷</author>
    <price>58.3</price>
  </Node>
  <Node genre="李赞红" ISBN="2-3631-4">
    <title>CS从入门到精通</title>
    <author>候捷</author>
    <price>58.3</price>
  </Node>
</Employees>

相关文章:

精彩碰撞!神经网络和传统滤波竟有这火花?

作者 | 凌霄出品 | AI大本营&#xff08;ID&#xff1a;rgznai100&#xff09;惯性传感器在航空航天系统中主要用于姿态控制和导航。微机电系统的进步促进了微型惯性传感器的发展&#xff0c;该装置进入了许多新的应用领域&#xff0c;从无人驾驶飞机到人体运动跟踪。在捷联式 …

软考新思维--2017年上半年信息系统项目管理师上午试题分析与答案(试题16-20题)...

2017年上半年信息系统项目管理师上午试题分析与答案&#xff08;试题16-20题&#xff09; 16.信息系统的安全威胁分成七类&#xff0c;其中不包括&#xff08;&#xff09;A、自然事件风险和人为事件风险B、软件系统风险和软件过程风险C、项目管理风险和应用风险D、功能风险和效…

ASP.NET 2.0 读取配置文件[INI](示例代码下载)

(一). 功能 操作配置文件[*.ini]类 (二). 代码 1. 核心类文件 INIFILE.cs 代码 1 ///<summary>2 ///INIFILE 操作类3 ///</summary>4 publicclassINIFILE5 {6 [DllImport("kernel32")]7 privatestaticexternlongWritePrivateProfileString(stringsectio…

CSDN送会员?免费的!都来领!

距离春节还有不到一个月你准备好给家人的春节礼物了吗&#xff1f;疫情下&#xff0c;为了让程序猿同学开心加班小编提前准备了一份牛年大礼 周五福利日&#xff0c;人人都可免费领会员&#xff01;助你提前实现CSDN会员卡自由&#xff01;奖品多多&#xff0c;不仅有CSDN月卡会…

BGP相邻体之间磋商的过程

一.BGP的几个概念 空闲&#xff08;IDLE&#xff09; 等待由管理员发起的START事件 正确&#xff0c;到连接状态 错误&#xff0c;回到空闲状态 连接状态&#xff08;Connect&#xff09; 等待TCP的连接是否成功&#xff0c;以期望获得一个对等体 正确&#xff0c;到开放发送Op…

去除ios input部分默认样式

input[typesubmit],input[typebutton]{-webkit-appearance:none;outline:none } input{border-radius: 0;}转载于:https://www.cnblogs.com/bbqwwb/p/6993064.html

Asp.net 2.0 C#实现压缩/解压功能

Asp.net 2.0 C#实现压缩/解压功能 (示例代码下载) (一). 实现功能对文件及目录的压缩及解压功能(二). 运行图片示例(三).代码 1. 压缩类 1/**//// <summary> 2/// 压缩类 3/// </summary>4publicclassZipClass5{ 6 public static void ZipFile(string Fi…

图像处理工具包ImagXpress的多页TIFF编辑API的使用(1)

2019独角兽企业重金招聘Python工程师标准>>> 在ImagXpress中用用于处理TIFF文件的TIFF编辑API&#xff0c;但是怎么使用呢&#xff0c;下面来具体的看看 ImagXpress中的ImageX.DeletePage 方法一次可以删除一个页面&#xff0c;ImageX.DeletePages 方法允许开发人员…

用Matplotlib轻松复刻分析图,看看哪个城市买房最自由

作者 | 费弗里来源 | Python大数据分析简介前不久「贝壳研究院」基于其丰富的房地产相关数据资源&#xff0c;发布了「2020 新一线城市居住报告」&#xff1a;图1而在这个报告中有几张数据可视化作品还是比较可圈可点的&#xff0c;作为&#xff08;在模仿中精进数据可视化&…

Python 代码规范

前言 Python 学习之旅&#xff0c;先来看看 Python 的代码规范&#xff0c;让自己先有个意识&#xff0c;而且在往后的学习中慢慢养成习惯 目录 Python代码规范一、简明概述 1、编码 如无特殊情况, 文件一律使用 UTF-8 编码如无特殊情况, 文件头部必须加入#-*-coding:utf-8-*-标…

二级域名用asp.net 2.0的实现方案

本人所了解有两种方案&#xff0c;可能还有其的方式&#xff0c;希望大家多多讨论&#xff01; 基本思路&#xff1a;1. 域名支持泛解析&#xff0c;即是指&#xff1a;把A记录 *.域名.com 解析到服务器IP&#xff0c;服务器IIS中做绑定&#xff0c;绑定时主机头为空;2. 为了…

又一例“监视员工?”百度回应:和 996 无关,目前没有任何应用

整理 | 王晓曼图源 | 视觉中国出品 | 程序人生 &#xff08;ID&#xff1a;coder _life&#xff09;1月13日晚间&#xff0c;针对百度公开“员工工作状态预测”专利惹争议一事&#xff0c;百度在官方微博火速回应称&#xff0c;这是一个管理上的“人岗匹配”衡量方法&#xff0…

僵死进程和僵尸进程

一个进程在调用exit命令结束自己的生命的时候&#xff0c;其实它并没有真正的被销毁&#xff0c;而是留下一个称为僵尸进程&#xff08;Zombie&#xff09;的数据结构&#xff08;系统调用exit&#xff0c;它的作用是使进程退出&#xff0c;但也仅仅限于将一个正常的进程变成一…

AC日记——[HNOI2010]BOUNCE 弹飞绵羊 洛谷 P3203

[HNOI2010]BOUNCE 弹飞绵羊 思路&#xff1a; SBlct&#xff1b; 代码&#xff1a; #include <bits/stdc.h> using namespace std; #define maxn 200005 int n,m,f[maxn],ch[maxn][2],rev[maxn],ki[maxn],sta[maxn],top,lit,size[maxn]; inline void in(int &now) {c…

C#与RSS亲密接触

讲述动态生成RSS文件的方法。动态生成RSS文件也基本有两种方法&#xff0c;一种是用字符串累加的方法&#xff0c;另一种是使用xml文档生成的方法。字符串累加的方法也比较简单&#xff0c;我也就不多说了&#xff0c;这里着重说一下生成XmlDocument的方法&#xff0c;包括各种…

2020 ACM Fellows 名单出炉,13 名华人入选,7 名来自国内!

【编者按】一年一度的 ACM Fellow 名单现已新鲜出炉&#xff01;向来以严格审查闻名的ACM Fellows&#xff0c;今年居然共选择了 95 名科学家&#xff0c;其中还有 13 位华人&#xff0c;来看看都是哪些大佬吧&#xff01;整理 | 郑丽媛出品 | CSDN&#xff08;ID&#xff1a;C…

Mybatis调用Oracle的存储过程

如何使用Mybaits调用数据库中的存储过程&#xff0c;下面以Oracle数据库的为例&#xff1a;1&#xff0e;在数据库中创建以下的存储过程&#xff1a;2&#xff0e;编写SQL映射文件WxclDAO.xml&#xff1a;<select id"selectWxcl2" parameterType"java.util.M…

JavaScript - 数据类型和变量

计算机顾名思义就是可以做数学计算的机器&#xff0c;因此&#xff0c;计算机程序理所当然地可以处理各种数值。但是&#xff0c;计算机能处理的远不止数值&#xff0c;还可以处理文本、图形、音频、视频、网页等各种各样的数据&#xff0c;不同的数据&#xff0c;需要定义不同…

用Socket发邮件的代码(可以群发)

qunFa.aspx文件的代码&#xff1a; <%... Page language"c#" Codebehind"qunFa.aspx.cs" AutoEventWireup"false" Inherits"liuwei.hanmail.qunFa" %><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN&qu…

rcp(插件开发)插件B需要引用插件A中的jar包-如何处理依赖关系

如果插件B需要引用插件A中的jar 通常需要以下几步&#xff1a; 1.插件B要依赖插件A 2.在插件B的build path中添加插件A的jar包 3.插件A的runtime导出插件B中使用jar的package

微软Cortana全面升级神经网络语音,效果堪比真人发音

近日&#xff0c;微软在全球范围内对Cortana进行了神经网络语音全面升级&#xff0c;升级后的Cortana更加自然流畅&#xff0c;语音效果堪比真人发音。 以下是Cortana不同国家、不同语言升级前后语音效果对比&#xff1a; Cortana音频 此次升级利用了深度神经网络技术&#…

Spring《五》集合的注入方式

List、Set、Map、Properties 1、List <property name"msg"> <list> <value>gf</value> <value>gd</value> <value>HelloWorld</value> </list> </property> 2、Set <property name"msg"&g…

虚方法的调用是怎么实现的(单继承VS多继承)

我们知道通过一个指向之类的父类指针可以调用子类的虚方法&#xff0c;因为子类的方法会覆盖父类同样的方法&#xff0c;通过这个指针可以找到对象实例的地址&#xff0c;通过实例的地址可以找到指向对应方法表的指针&#xff0c;而通过这个方法的名字就可以确定这个方法在方法…

asp.net 2.0防止同一用户同时登陆

要防止同一用户同时登陆,首页应该记录在线用户的信息(这里与用户名为例),然后判断正在登陆的用户里面是否已存在&#xff0e;在这里使用一个cache存放已经登陆的用户名&#xff0e;但是还有一个问题就是要知道用户是什么时候离开系统的呢&#xff1f;这就要定期清除cache中的内…

Python+Dash快速web应用开发——基础概念篇

作者&#xff1a;费弗里来源&#xff1a;Python大数据分析❝本文示例代码与数据已上传至https://github.com/CNFeffery/DataScienceStudyNotes❞1 简介这是我的新系列教程「PythonDash快速web应用开发」的第一期&#xff0c;我们都清楚学习一个新工具需要一定的动力&#xff0c…

POJ 1273 Drainage Ditches

网络流。题意非常easy。给出单向边&#xff0c;容量。找最大流。注意重边要加起来。g[u][v].cc; 第一次写网络流。也是第一个网络流的题。看了两天&#xff0c;理解了之后就唰唰唰的写出来了。 大概可能是EK吧。ORZ都不知道用的啥算法。仅仅是感觉要这样写。由于重边还WA了。改…

利用GridView显示主细表并一次编辑明细表所有数据的例子

全部代码如下&#xff1a; ASPX&#xff1a; <% Page Language"C#"ValidateRequest"false"AutoEventWireup"true"EnableViewState"false"CodeFile"Default2.aspx.cs"Inherits"Default2"%><!DOCTYPE ht…

TensorFlow搭建垃圾分类系统大师(免费领源码)

人工智能是一个多学科交叉融合的领域&#xff0c;其包含机器学习、计算机视觉、自然语言处理等多个子领域&#xff0c;其中计算机视觉是应用最广泛的领域之一。大多数人熟悉的手机和相机中的人脸识别功能&#xff0c;就是人工智能子领域——计算机视觉的体现。计算机视觉中的图…

for的循环遍体

以下讲解for的变体形式&#xff0c;对于一般的for语句常规这里不再赘述关于for变体 主要是用来实现一些特殊需求&#xff1a;//注意不要使for成为死循环 for(int i0;i!5;1){//DOLOOP }1&#xff09;假如&#xff0c;我们需要对循环变量i在循环外部使用&#xff0c;并调用循环变…

切版网上线,启用qieban.cn

2019独角兽企业重金招聘Python工程师标准>>> 近期&#xff0c;切版网收购并启用了qieban.cn域名&#xff0c;输入域名可以看到非常抢眼的黄底黑色的网站。复制国外psd2html模式&#xff0c;主要提供html5/css3前端外包。 可见切版网对域名的保护是非常的重视。据查询…