<pre name="code" class="html"><?xml version="1.0" encoding="utf-8"?>
<root>
<group1>
<item/>
<item/>
<item/>
</group1>
<group2>
</group2>
</root>
首先来用C#进行建立含有以上内容的xml文档,保存在程序同目录下的"data.xml"里
注意,在xml里节点(Node)的意义是 "<xxx/>"或者"<xxx> xxx </xxx>",也就是说,是一个整体。
而元素(Element)的意义与节点有交集,但不等于节点,可以是是构成节点的几个元素,比如<aaa>是Element,而结尾的</aaa>叫做EndElement。
using System.Xml;
XmlDocument xmlDoc = new XmlDocument();
//声明
XmlDeclaration dec = xmlDoc.CreateXmlDeclaration("1.0", "utf-8", null);
xmlDoc.AppendChild(dec);
//
XmlElement root = xmlDoc.CreateElement("root");
XmlElement group_1 = xmlDoc.CreateElement("group1");
XmlElement group_2 = xmlDoc.CreateElement("group2");
XmlElement item_1 = xmlDoc.CreateElement("item");
XmlElement item_2 = xmlDoc.CreateElement("item");
XmlElement item_3 = xmlDoc.CreateElement("item");
//
group_1.AppendChild(item_1);
group_1.AppendChild(item_2);
group_1.AppendChild(item_3);
root.AppendChild(group_1);
root.AppendChild(group_2);
xmlDoc.AppendChild(root);
xmlDoc.Save("data.xml");
接下来,在root//group2中添加一个Name == "student"的元素
使其有自己的属性(Attribute) :id = "20051200",同时在innerText中添加"WPF"
<?xml version="1.0" encoding="utf-8"?>
<root>
<group1>
<item/>
<item/>
<item/>
</group1>
<group2>
<student id="20051200">WPF</student>
</group2>
</root>
C#代码如下:
XmlDocument doc = new XmlDocument();
doc.Load("data.xml");
XmlNode root = doc.SelectSingleNode("root//group2");//root指向root//group2
//设置元素的内容
XmlElement stu = doc.CreateElement("student");
stu.SetAttribute("id", "20051200");
stu.InnerText = "WPF";
//添加到root//group2下,保存
root.AppendChild(stu);
doc.Save("data.xml")
接下来将root//group1中的item的innerText添加上字符串"aaa",即
<pre name="code" class="html"><?xml version="1.0" encoding="utf-8"?>
<root>
<group1>
<item>aaa</item>
<item>aaa</item>
<item>aaa</item>
</group1>
<group2>
<student id="20051200">WPF</student>
</group2>
</root>
C#代码如下:
XmlDocument doc = new XmlDocument();
doc.Load("data.xml");
XmlNode root = doc.SelectSingleNode("root//group1");//root指向root//group1
XmlNodeList nodelist = root.ChildNodes;
foreach (XmlNode t in nodelist)
{
t.innerText = "aaa";
}
doc.Save("data.xml")
接下来讨论删除子节点的问题,
分别用remove()和removeAll()
将group1,2里的节点全部删除,即
<?xml version="1.0" encoding="utf-8"?>
<root>
<group1>
</group1>
<group2>
</group2>
</root>
C#:
//删除root//gruop2//student
XmlDocument doc = new XmlDocument();
doc.Load("data.xml");
XmlNode node = doc.SelectSingleNode("root//group2//student");
XmlNode parent = doc.SelectSingleNode("root//group2");
parent.RemoveChild(node);
doc.Save("1.xml");
//删除root//group1中的所有节点
XmlDocument doc = new XmlDocument();
doc.Load("data.xml");
XmlNode node = doc.SelectSingleNode("root//group1");
node.RemoveAll();
doc.Save("1.xml");
想要取出存储的一些属性也是比较方便的,通常可以把一些字符串存在innerText中
假如在做删除操作之前,我要取出student中的"WPF",打印在控制台上
XmlDocument doc = new XmlDocument();
doc.Load("data.xml");
XmlNode node = doc.SelectSingleNode("root//group2//student");
string str = node.innerText;
Console.WriteLine(str);
doc.Save("1.xml");
如果要批量操作,可以参照上面提到的删除item操作一样,将一组node装入XmlNodeList里,用foreach操作。