C# 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檔案,這個就不記錄了,上面這些操作會了,遍歷就不是問題了。