c#处理xml,C#读写xml,C#操作XML方法详解

c#处理xml,C#读写xml,C#操作XML方法详解

对于可扩展标记语言读写操作,项目中经常要用到,之前木有好好总结过,例如LINQ到可扩展标记语言也用过,这篇文章主要介绍了C#操作可扩展标记语言的方法

目录

使用系统. Xml

//初始化一个可扩展标记语言实例

XML文档XML=new XML document();

//导入指定可扩展标记语言文件

xml .负载(路径);

xml .加载(HttpContext .当前。服务器。mappath(' ~/文件/书店。XML’);

//指定一个节点

XmlNode root=xml .SelectSingleNode('/root ');

//获取节点下所有直接子节点

XmlNodeList childlist=root .子节点;

//判断该节点下是否有子节点

根HasChildNodes

//获取同名同级节点集合

XmlNodeList nodelist=xml .选择节点('/Root/News ');

//生成一个新节点

XmlElement node=xml .CreateElement(“新闻");

//将节点加到指定节点下,作为其子节点

根AppendChild(节点);

//将节点加到指定节点下某个子节点前

根InsertBefore(节点,根child e nodes[I]);

//为指定节点的新建属性并赋值

节点SetAttribute('id ',' 11111 ');

//为指定节点添加子节点

根AppendChild(节点);

//获取指定节点的指定属性值

字符串id=节点。属性['id'].价值;

//获取指定节点中的文本

字符串内容=节点内文

//保存可扩展标记语言文件

字符串路径=服务器MapPath(' ~/文件/书店。XML’);

xml .保存(路径);

//或者使用:xml .保存(HttpContext .当前。服务器。mappath(' ~/文件/书店。XML’);

二、具体实例

在C# .网中如何操作可扩展标记语言

需要添加的命名空间:

使用系统. Xml

定义几个公共对象:

XmlDocument

XmlNode xmlnode

XmlElement xmlelem

1,创建到服务器同名目录下的可扩展标记语言文件:

方法一:

XML doc=新XML文档();

//加入可扩展标记语言的声明段落,可扩展标记语言版本='1.0 '编码='gb2312 '?

XML声明xmldecl

xmldecl=xmldoc .CreateXmlDeclaration('1.0 ',' gb2312 ',null);

xmldoc .AppendChild(XML decl);

//加入一个根元素

xmlelem=xmldoc .CreateElement('、' Employees '、');

xmldoc .AppendChild(XML elem);

//加入另外一个元素

for(int I=1;i3;我)

{

XmlNode root=xmldoc .SelectSingleNode(“雇员");//查找雇员

XmlElement xe1=xmldoc .CreateElement(" Node ");//创建一个结节节点

xe1 .SetAttribute('genre ','李赞红');//设置该节点类型属性

xe1 .SetAttribute('ISBN ',' 2-3631-4 ');//设置该节点国际标准图书编号属性

XmlElement xesub1=xmldoc .CreateElement(' title ');

xesub1 .InnerText='CS从入门到精通;//设置文本节点

xe1 .AppendChild(xe sub 1);//添加到结节节点中

XmlElement xesub2=xmldoc .CreateElement(“作者”);

xesub2 .InnerText='候捷;

xe1 .AppendChild(xe sub 2);

XmlElement xesub3=xmldoc .CreateElement(' price ');

xesub3 .InnerText=' 58.3

xe1 .AppendChild(xe sub 3);

根AppendChild(xe1);//添加到雇员节点中

}

//保存创建好的可扩展标记语言文档

xmldoc .保存(服务器MapPath('数据。XML’);

//////////////////////////////////////////////////////////////////////////////////////

结果:在同名目录下生成了名为data.xml的文件,内容如下,

?可扩展标记语言版本='1.0 '编码='gb2312 '?

雇员

节点类型='李赞红ISBN='2-3631-4 '

titleCS从入门到精通/标题

作者候捷/作者

价格58.3元/个

/节点

节点类型='李赞红ISBN='2-3631-4 '

titleCS从入门到精通/标题

作者候捷/作者

价格58.3元/个

/节点

/员工

方法二:

XmlTextWriter

string strFilename=Server .MapPath(' data1。XML’);

xmlWriter=新的xmltext编写器(strFilename,Encoding .默认);//创建一个可扩展标记语言文档

xmlWriter .格式化=格式化。缩进;

xmlWriter .WriteStartDocument();

xmlWriter .写startelement(" Employees ");

xmlWriter .写startelement(" Node ");

xmlWriter .WriteAttributeString('genre ','李赞红');

xmlWriter .WriteAttributeString('ISBN ',' 2-3631-4 ');

xmlWriter .编写startelement(“title”);

xmlWriter .WriteString('CS从入门到精通');

xmlWriter .WriteEndElement();

xmlWriter .写startelement(“作者”);

xmlWriter .WriteString('候捷');

xmlWriter .WriteEndElement();

xmlWriter .编写startelement(' price ');

xmlWriter .WriteString(' 58.3 ');

xmlWriter .WriteEndElement();

xmlWriter .WriteEndElement();

xmlWriter .close();

//////////////////////////////////////////////////////////////////////////////////////

结果:

?可扩展标记语言版本='1.0 '编码='gb2312 '?

雇员

节点类型='李赞红ISBN='2-3631-4 '

titleCS从入门到精通/标题

作者候捷/作者

价格58.3元/个

/节点

/员工

2,添加一个结点:

XML文档XML doc=new XML document();

xmlDoc .加载(服务器MapPath('数据。XML’);

XmlNode root=xmlDoc .SelectSingleNode(“雇员");//查找雇员

XmlElement xe1=xmlDoc .CreateElement(" Node ");//创建一个结节节点

xe1 .SetAttribute('genre ','张三');//设置该节点类型属性

xe1 .SetAttribute('ISBN ',' 1-1111-1 ');//设置该节点国际标准图书编号属性

XmlElement xesub1=xmlDoc .CreateElement(' title ');

xesub1 .InnerText='C#入门帮助;//设置文本节点

xe1 .AppendChild(xe sub 1);//添加到结节节点中

XmlElement xesub2=xmlDoc .CreateElement(“作者”);

xesub2 .InnerText='高手;

xe1 .AppendChild(xe sub 2);

XmlElement xesub3=xmlDoc .CreateElement(' price ');

xesub3 .InnerText=' 158.3

xe1 .AppendChild(xe sub 3);

根AppendChild(xe1);//添加到雇员节点中

xmlDoc .保存(服务器MapPath('数据。XML’);

//////////////////////////////////////////////////////////////////////////////////////

结果:在可扩展标记语言原有的内容里添加了一个结点,内容如下,

?可扩展标记语言版本='1.0 '编码='gb2312 '?

雇员

节点类型='李赞红ISBN='2-3631-4 '

titleCS从入门到精通/标题

作者候捷/作者

价格58.3元/个

/节点

节点类型='李赞红ISBN='2-3631-4 '

titleCS从入门到精通/标题

作者候捷/作者

价格58.3元/个

/节点

节点类型='张三ISBN='1-1111-1 '

标题C#入门帮助/标题

作者高手/作者

价格158.3元/个

/节点

/员工

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

XML文档XML doc=new XML document();

xmlDoc .加载(服务器MapPath('数据。XML’);

XmlNodeList nodeList=xmlDoc .SelectSingleNode('Employees ').子节点;//获取雇员节点的所有子节点

foreach(节点列表中的XmlNode xn)//遍历所有子节点

{

XML元素xe=(XML元素)xn;//将子节点类型转换为XmlElement类型

如果(xe .GetAttribute('genre')=='张三')//如果类型属性值为"张三"

{

xe .SetAttribute('流派','更新张三');//则修改该属性为"更新张三"

XmlNodeList nls=xe .子节点;//继续获取元素氙的符号子节点的所有子节点

foreach(nls中的XmlNode xn1)//遍历

{

XML元素xe2=(XML元素)xn1//转换类型

如果(xe2 .Name=='author')//如果找到

{

xe2 .InnerText='亚胜;//则修改

}

}

}

}

xmlDoc .保存(服务器MapPath('数据。XML’);//保存。

//////////////////////////////////////////////////////////////////////////////////////

结果:将原来的所有结点的信息都修改了,xml的内容如下,

?可扩展标记语言版本='1.0 '编码='gb2312 '?

雇员

节点类型='李赞红ISBN='2-3631-4 '

titleCS从入门到精通/标题

作者候捷/作者

价格58.3元/个

/节点

节点类型='李赞红ISBN='2-3631-4 '

titleCS从入门到精通/标题

作者候捷/作者

价格58.3元/个

/节点

节点类型='更新张三ISBN='1-1111-1 '

标题C#入门帮助/标题

作者亚胜/作者

价格158.3元/个

/节点

/员工

4,修改结点(添加结点的属性和添加结点的自结点):

XML文档XML doc=new XML document();

xmlDoc .加载(服务器MapPath('数据。XML’);

XmlNodeList nodeList=xmlDoc .SelectSingleNode('Employees ').子节点;//获取雇员节点的所有子节点

foreach(节点列表中的XmlNode xn)

{

XML元素xe=(XML元素)xn;

xe .SetAttribute('test ',' 111111 ');

XmlElement xesub=xmlDoc .CreateElement(' flag ');

赛博InnerText=" 1

xe .AppendChild(xesub);

}

xmlDoc .保存(服务器MapPath('数据。XML’);

//////////////////////////////////////////////////////////////////////////////////////

结果:每个结点的属性都添加了一个,子结点也添加了一个,内容如下,

?可扩展标记语言版本='1.0 '编码='gb2312 '?

雇员

节点类型='李赞红ISBN='2-3631-4' test='111111 '

titleCS从入门到精通/标题

作者候捷/作者

价格58.3元/个

标志1/标志

/节点

节点类型='李赞红ISBN='2-3631-4' test='111111 '

titleCS从入门到精通/标题

作者候捷/作者

价格58.3元/个

标志1/标志

/节点

节点类型='更新张三ISBN='1-1111-1' test='111111 '

标题C#入门帮助/标题

作者亚胜/作者

价格158.3元/个

标志1/标志

/节点

/员工

5,删除结点中的某一个属性:

XML文档XML doc=new XML document();

xmlDoc .加载(服务器MapPath('数据。XML’);

XmlNodeList xnl=xmlDoc .SelectSingleNode('Employees ').子节点;

foreach(xnl中的XmlNode xn)

{

XML元素xe=(XML元素)xn;

xe .移除属性(“流派”);//删除类型属性

XmlNodeList nls=xe .子节点;//继续获取元素氙的符号子节点的所有子节点

foreach(nls中的XmlNode xn1)//遍历

{

XML元素xe2=(XML元素)xn1//转换类型

如果(xe2 .Name=='flag')//如果找到

{

xe .删除子对象(xe2);//则删除

}

}

}

xmlDoc .保存(服务器MapPath('数据。XML’);

//////////////////////////////////////////////////////////////////////////////////////]

结果:删除了结点的一个属性和结点的一个子结点,内容如下,

?可扩展标记语言版本='1.0 '编码='gb2312 '?

雇员

节点ISBN='2-3631-4 '测试='111111 '

titleCS从入门到精通/标题

作者候捷/作者

价格58.3元/个

/节点

节点ISBN='2-3631-4 '测试='111111 '

titleCS从入门到精通/标题

作者候捷/作者

价格58.3元/个

/节点

节点ISBN='1-1111-1 '测试='111111 '

标题C#入门帮助/标题

作者亚胜/作者

价格158.3元/个

/节点

/员工

6,删除结点:

XML文档XML doc=new XML document();

xmlDoc .加载(服务器MapPath('数据。XML’);

XmlNode root=xmlDoc .SelectSingleNode(“雇员");

XmlNodeList xnl=xmlDoc .SelectSingleNode('Employees ').子节点;

for(int I=0;ixnl .数数;我)

{

XmlElement xe=(XmlElement)xnl .项目(一);

如果(xe .GetAttribute('genre')=='张三)

{

根移除子代(xe);

if(ixnl .count)I=I-1;

}

}

xmlDoc .保存(服务器MapPath('数据。XML’);

//////////////////////////////////////////////////////////////////////////////////////]

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

?可扩展标记语言版本='1.0 '编码='gb2312 '?

雇员

节点类型='李赞红ISBN='2-3631-4 '

titleCS从入门到精通/标题

作者候捷/作者

价格58.3元/个

/节点

节点类型='李赞红ISBN='2-3631-4 '

titleCS从入门到精通/标题

作者候捷/作者

价格58.3元/个

/节点

节点类型='张三ISBN='1-1111-1 '

标题C#入门帮助/标题

作者高手/作者

价格158.3元/个

/节点

节点类型='张三ISBN='1-1111-1 '

标题C#入门帮助/标题

作者高手/作者

价格158.3元/个

/节点

/员工

删除后的内容:

?可扩展标记语言版本='1.0 '编码='gb2312 '?

雇员

节点类型='李赞红ISBN='2-3631-4 '

titleCS从入门到精通/标题

作者候捷/作者

价格58.3元/个

/节点

节点类型='李赞红ISBN='2-3631-4 '

titleCS从入门到精通/标题

作者候捷/作者

价格58.3元/个

/节点

/员工

7,按照文本文件读取可扩展标记语言

系统10 . IO。StreamReader myFile=new

系统10 . IO。StreamReader(服务器MapPath('data.xml '),系统正文。编码。默认);

//注意系统。文本。编码。默认值

string myString=myFile .ReadToEnd();//我的字符串是读出的字符串

我的文件. close();

三、高级应用

/*读取可扩展标记语言数据两种可扩展标记语言方式*/

美国汽车协会

bbsomething/bb

ccsomething/cc

/aaa

美国汽车协会

add key='123' value='321'/

/aaa

/*第一种方法*/

DS .ReadXml('您的可扩展标记语言文件名');

集装箱DataItem(" bb ");

集装箱DataItem(“cc”);

DS .ReadXmlSchema('您的可扩展标记语言文件名');

/*第二种方法*/

美国汽车协会

add key='123' value='321'/

/aaa

如果我要找到123然后取到321应该怎么写呢?

使用系统. XML

XmlDataDocument xmlDoc=新系统. XML。XML数据文档();

xmlDoc .load(@ ' c:/config。XML’);

XmlElement elem=xmlDoc .GetElementById(" add ");

string str=elem .属性['值']。价值

/*第三种方法:选择单一节点读取两种格式的xml * - /

-

?可扩展标记语言版本='1.0 '编码='utf-8 '?

配置

appSettings

ConnectionStringData Source=yf用户id=ctm _ dbo密码=123/连接字符串

/appSettings

/配置

-

XML文档doc=new XML document();

医生load(strXmlName);

XmlNode node=doc .SelectSingleNode('/configuration/appSettings/ConnectionString ');

如果(节点!=空)

{

字符串k1=节点。价值;//null

字符串k2=节点InnerText//数据源=yf用户id=ctm _ dbo密码=123

字符串k3=节点InnerXml//数据源=yf用户id=ctm _ dbo密码=123

节点=空

}

********************************************************************

?可扩展标记语言版本='1.0 '编码='utf-8 '?

配置

appSettings

add key=' ConnectionString ' value=' Data Source=YF;用户id=ctm _ dbo密码=123' /

/appSettings

/配置

** - **

XmlNode node=doc .SelectSingleNode('/configuration/appSettings/add ');

如果(节点!=空)

{

字符串k=节点。属性['key'].价值;

字符串v=节点。属性['值']。价值;

节点=空

}

* - *

XmlNode node=doc .SelectSingleNode('/configuration/appSettings/add ');

如果(节点!=空)

{

XML nodereader NR=新的XML nodereader(node);

近移动到内容();

//检查当前节点是否是内容节点。如果此节点不是内容节点,则读取器向前跳至下一个内容节点或文件结尾。

近移动到属性("值");

字符串s=nr .价值;

节点=空

}

郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

相关文章阅读

  • 设计一个简单的C#控制台应用程序,C#控制台程序,C# 创建控制台应用程序
  • 深入解析windows第8版,深入解析C#(第4版)
  • 数组代码,c# 数组操作,C# 数组实例介绍(图文)
  • 学会C#要多久,学会c#要多久,c#学习之30分钟学会XAML
  • 回溯法01背包问题c,回溯法求解01背包问题伪代码,C#使用回溯法解决背包问题实例分析
  • xml文件转义字符,xml转意字符,C# XML中的转义字符操作
  • winform 进度条控件,c# 进度条使用
  • winform 进度条控件,c# 进度条使用,C#使用winform实现进度条效果
  • winform backgroundworker,c# isbackground
  • winform backgroundworker,c# isbackground,C# BackgroundWorker用法详解
  • lua与c#交互,lua c#
  • lua与c#交互,lua c#,ToLua框架下C#与Lua代码的互调操作
  • linq c#,linq原理 c#
  • linq c#,linq原理 c#,c#中LINQ的基本用法实例
  • java decimal保留两位小数,sql中decimal函数保留2位小数,C#中decimal保留2位有效小数的实现方法
  • 留言与评论(共有 条评论)
       
    验证码: