在C#里利用XML进行数据读写以及修改

<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操作。


  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值