永发信息网

c#中怎么解析xml

答案:2  悬赏:0  手机版
解决时间 2021-02-16 00:50
c#中怎么解析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");//查找
XmlElement xe1=xmldoc.CreateElement("Node");//创建一个节点
xe1.SetAttribute("genre","李赞红");//设置该节点genre属性
xe1.SetAttribute("ISBN","2-3631-4");//设置该节点ISBN属性
XmlElement xesub1=xmldoc.CreateElement("title");
xesub1.InnerText="CS从入门到精通";//设置文本节点
xe1.AppendChild(xesub1);//添加到节点中
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);//添加到节点中
}
//保存创建好的XML文档
xmldoc.Save ( Server.MapPath("data.xml") ) ;
//////////////////////////////////////////////////////////////////////////////////////
结果:在同名目录下生成了名为data.xml的文件,内容如下,



CS从入门到精通
候捷
58.3


CS从入门到精通
候捷
58.3



方法二:
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();
//////////////////////////////////////////////////////////////////////////////////////
结果:



CS从入门到精通
候捷
58.3


2,添加一个结点:
XmlDocument xmlDoc=new XmlDocument();
xmlDoc.Load(Server.MapPath("data.xml"));
XmlNode root=xmlDoc.SelectSingleNode("Employees");//查找
XmlElement xe1=xmlDoc.CreateElement("Node");//创建一个节点
xe1.SetAttribute("genre","张三");//设置该节点genre属性
xe1.SetAttribute("ISBN","1-1111-1");//设置该节点ISBN属性
XmlElement xesub1=xmlDoc.CreateElement("title");
xesub1.InnerText="C#入门帮助";//设置文本节点
xe1.AppendChild(xesub1);//添加到节点中
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);//添加到节点中
xmlDoc.Save ( Server.MapPath("data.xml") );
//////////////////////////////////////////////////////////////////////////////////////
结果:在xml原有的内容里添加了一个结点,内容如下,



CS从入门到精通
候捷
58.3


CS从入门到精通
候捷
58.3


C#入门帮助
高手
158.3


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的内容如下,



CS从入门到精通
候捷
58.3


CS从入门到精通
候捷
58.3


C#入门帮助
亚胜
158.3


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") );
//////////////////////////////////////////////////////////////////////////////////////
结果:每个结点的属性都添加了一个,子结点也添加了一个,内容如下,



CS从入门到精通
候捷
58.3
1


CS从入门到精通
候捷
58.3
1


C#入门帮助
亚胜
158.3
1


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") );
//////////////////////////////////////////////////////////////////////////////////////]
结果:删除了结点的一个属性和结点的一个子结点,内容如下,



CS从入门到精通
候捷
58.3


CS从入门到精通
候捷
58.3


C#入门帮助
亚胜
158.3


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{
XmlElement xe=(XmlElement)xnl.Item(i);
if(xe.GetAttribute("genre")=="张三")
{
root.RemoveChild(xe);
if(i}
}
xmlDoc.Save( Server.MapPath("data.xml") );
//////////////////////////////////////////////////////////////////////////////////////]
结果:删除了符合条件的所有结点,原来的内容:



CS从入门到精通
候捷
58.3


CS从入门到精通
候捷
58.3


C#入门帮助
高手
158.3


C#入门帮助
高手
158.3


删除后的内容:



CS从入门到精通
候捷
58.3


CS从入门到精通
候捷
58.3

全部回答

很简单 标准xml 一个节点一个节点获取 ,再获取该节点的子节点,往下获取
代码参考 通过文件或者字符串加载XmlDocument,获得指定的节点或者节点集合
            XmlDocument doc = new XmlDocument();
                doc.LoadXml(xmlContent);
                XmlNode root = doc.SelectSingleNode("root");
                XmlNode commonNode = root.SelectSingleNode("common");
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
什么英雄打野最好
音调太高容易破音怎么办?
苏州火车站到渔洋街7号颐养老年公寓,一打车
北湖区郴州华城网咖地址在哪,我要去那里
事业单位13个月工资还有没有
海洋渔具行地址有知道的么?有点事想过去
该派音乐是客观的,强调捕捉人对外部世界的瞬
大拇指没了是几级残疾
王者荣耀狄仁杰超时空战士和吕布末日战甲哪个
1ms的正弦波是什么意思啊 ,怎么换成频率啊。
米兰国际婚纱摄影(乡宁旗舰店)地址在哪,我要
湘潭县武术协会哪位知道具体地址啊
金洪玻璃公司怎么去啊,有知道地址的么
苏州酒吧驻唱工资多少
The best or nothing怎么翻译?翻译成“不成
推荐资讯
把桌面路径更改为D盘 有什么坏处吗 我是固态
怪物猎人4g真打 防2 业务 炮师怎么出
在哪里能看到漂亮老师爱上我
获得表扬单位或者表扬的诗词
天龙八部3D礼包怎么领 最新礼包领取大全分享
理论联系实际,什么,在实践中
【显微镜原理】望远镜和显微镜的成像原理
美鱼胶和西洋参高粱参能一起炖
【已知a2+b2+c2-ab-bc-ca=0,求证:a=b=c.】
梦见自己牙齿从中间断了,还有虫!但是没有流血
平行四边形ABCD,AF平分∠BAD交BC于F,CE平分∠
关于朱丽叶为什么变女巫的讨论
正方形一边上任一点到这个正方形两条对角线的
阴历怎么看 ?