对于可扩展标记语言读写操作,项目中经常要用到,之前木有好好总结过,例如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的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。