C# xml文件的创建,修改和添加节点
2016年11月15日 17:26:08 luckyone906 阅读数 13533更多
最近在做一个项目,设计到xml文件的传输,所以就研究了一下。
,.NET Framework完全支持XML DOM模式,但它不支持SAX模式。.NET Framework支持两种不同的分析模式:XML DOM分析器(XMLDocument类)和XML阅读器(XMLTextReader类),不支持SAX分析器, 但这并不意味着它没有提供类似SAX分析器的功能。通过XML阅读器可以将SAX的所有的功能很容易的实现及更有效的运用。
但是我们一般运用最多的是DOM。
一、创建xml文件
using System.Xml;
using System.IO;//这个一定要写
XmlDocument xmlDoc = new XmlDocument();
//加入XML的声明段落,Save方法不再xml上写出独立属性
xmlDoc.AppendChild(xmlDoc.CreateXmlDeclaration("1.0", "UTF-8", null));
//加入根元素
XmlElement root = xmlDoc.CreateElement("ROOT");
xmlDoc.AppendChild(root);
XmlElement memberlist = xmlDoc.CreateElement("MEMBERLIST");
XmlElement memberA = xmlDoc.CreateElement("MEMBER");
memberA.SetAttribute("AGE", ">=29");
memberA.SetAttribute("SEX", "MALE");
XmlElement zs = xmlDoc.CreateElement("NAME");
zs.InnerText = "张三";
XmlElement ls = xmlDoc.CreateElement("NAME");
ls.InnerText = "李四";
memberA.AppendChild(zs);
memberA.AppendChild(ls);
XmlElement memberB = xmlDoc.CreateElement("MEMBER");
memberB.SetAttribute("AGE", ">=35");
memberB.SetAttribute("SEX", "MALE");
XmlElement ww = xmlDoc.CreateElement("NAME");
ww.InnerText = "王五";
XmlElement zl = xmlDoc.CreateElement("NAME");
zl.InnerText = "赵六";
memberB.AppendChild(ww);
memberB.AppendChild(zl);
memberlist.AppendChild(memberA);
memberlist.AppendChild(memberB);
root.AppendChild(memberlist);
xmlDoc.Save(xmlpath);
效果如下:
<?xml version="1.0" encoding="UTF-8"?>
<ROOT>
<MEMBERLIST>
<MEMBERAGE=">=29"SEX="MALE">
<NAME>李四</NAME>
* <NAME/>
</MEMBER>
<MEMBERAGE=">=35"SEX="MALE">
<NAME>王五</NAME>
<NAME>赵六</NAME>
</MEMBER>
</MEMBERLIST>
</ROOT>
看上面成功倒是成功了,不过由于粗心,在*这行的NAME标签出错了。我想把第一个NAME改为张三,第二个NAME改为李四
二、修改xml文件
c#代码如下:
XmlDocument xmlDoc = new XmlDocument();
xmlDoc.Load(xmlpath);
XmlNode memberlist = xmlDoc.SelectSingleNode("ROOT/MEMBERLIST");
XmlNodeList nodelist=memberlist.ChildNodes;
// XmlNodeList nodelist=xmlDoc.GetElementsByTagName("MEMBER");
foreach (XmlNode node in nodelist)
{
if (node.Attributes["AGE"].InnerText.ToString().Equals(">=29"))
{
node.ChildNodes[0].InnerText = "张三";
node.ChildNodes[1].InnerText = "李四";
break;
}
}
xmlDoc.Save(xmlpath);
MessageBox.Show("保存成功");
xml效果如下:
<?xml version="1.0" encoding="UTF-8"?>
<ROOT>
<MEMBERLIST>
<MEMBERAGE=">=29"SEX="MALE">
<NAME>张三</NAME>
<NAME>李四</NAME>
</MEMBER>
<MEMBERAGE=">=35"SEX="MALE">
<NAME>王五</NAME>
<NAME>赵六</NAME>
</MEMBER>
</MEMBERLIST>
</ROOT>
这时候,如果增加人员的情况下,我还需要添加节点。
三、xml文件添加节点如下
c#代码如下
XmlDocument xmlDoc = new XmlDocument();
if (File.Exists(xmlpath))
{
xmlDoc.Load(xmlpath);
XmlNode memberlist = xmlDoc.SelectSingleNode("ROOT/MEMBERLIST");
XmlElement member = xmlDoc.CreateElement("MEMBER");
member.SetAttribute("AGE", "<29");
member.SetAttribute("SEX", "MAIL");
XmlElement lq = xmlDoc.CreateElement("NAME");
lq.InnerText = "六七";
member.AppendChild(lq);
memberlist.AppendChild(member);
xmlDoc.Save(xmlpath);
MessageBox.Show("添加成功");
}
else
{
MessageBox.Show("文件不存在");
}
效果如下:
<<ROOT>
<MEMBERLIST>
<MEMBERAGE=">=29"SEX="MALE">
<NAME>张三</NAME>
<NAME>李四</NAME>
</MEMBER>
<MEMBERAGE=">=35"SEX="MALE">
<NAME>王五</NAME>
<NAME>赵六</NAME>
</MEMBER>
<MEMBERAGE="<29" SEX="MALE">
<NAME>六七</NAME>
</MEMBER>
</MEMBERLIST>
< </ROOT>
有几点要记住了,XmlNode包含XmlElement,即XmlNode可以转化为XmlElement而XmlElement不可以转化为XmlNode.
xmDoc.selectSingleNode("节点名称").这个节点名称是他的路径。若是根节点当时只写名称就可以了,若是子节点,则需要些明从根节点到它的路径。
再就是遍历xml文件,这个就不记录了,上面这些操作会了,遍历就不是问题了。