轉(zhuǎn)帖|其它|編輯:郝浩|2011-06-08 14:18:24.000|閱讀 667 次
概述:上一帖我們已經(jīng)對(duì)xpath語法進(jìn)行了簡單的介紹,對(duì)xml文件的和操作數(shù)據(jù)庫有一些相同之處,同樣是增,刪,改,查四種操作。現(xiàn)在我們就詳細(xì)介紹一下增和刪兩種操作。看下面的一個(gè)xml示例:
# 界面/圖表報(bào)表/文檔/IDE等千款熱門軟控件火熱銷售中 >>
上一帖我們已經(jīng)對(duì)xpath語法進(jìn)行了簡單的介紹,對(duì)xml文件的和操作數(shù)據(jù)庫有一些相同之處,同樣是增,刪,改,查四種操作。現(xiàn)在我們就詳細(xì)介紹一下增和刪兩種操作。看下面的一個(gè)xml示例:
<?xml version="1.0" encoding="utf-8"?>
<phonebook>
<member id="6">
<name>456</name>
<qq>5465</qq>
</member>
<member id="5">
<name>jjjjj</name>
<qq>3456789</qq>
</member>
</phonebook>
xml的每個(gè)節(jié)點(diǎn)分為節(jié)點(diǎn)名稱,節(jié)點(diǎn)值和屬性三類,如:member節(jié)點(diǎn):id為其一個(gè)屬性,menber為其節(jié)點(diǎn)名稱。再如:name節(jié)點(diǎn)456為其節(jié)點(diǎn)值。
如果我們需要增加一個(gè)節(jié)點(diǎn)可以調(diào)用一下幾個(gè)方法:
/// <summary>
/// 在根節(jié)點(diǎn)下添加父節(jié)點(diǎn)
/// </summary>
public static void AddParentNode(string xmlPath,string parentNode)
{
XmlDocument xdoc = new XmlDocument();
xdoc.Load(xmlPath);
// 創(chuàng)建一個(gè)新的menber節(jié)點(diǎn)并將它添加到根節(jié)點(diǎn)下
XmlElement Node = xdoc.CreateElement(parentNode);
xdoc.DocumentElement.PrependChild(Node);
xdoc.Save(xmlPath);
}
#region 插入一節(jié)點(diǎn),帶一屬性
/// <summary>
/// 插入一節(jié)點(diǎn),帶一屬性
/// </summary>
/// <param name="xmlPath">Xml文檔路徑</param>
/// <param name="MainNode">當(dāng)前節(jié)點(diǎn)路徑</param>
/// <param name="Element">新節(jié)點(diǎn)</param>
/// <param name="Attrib">屬性名稱</param>
/// <param name="AttribContent">屬性值</param>
/// <param name="Content">新節(jié)點(diǎn)值</param>
public static void XmlInsertElement(string xmlPath, string MainNode, string Element, string Attrib, string AttribContent, string Content)
{
XmlDocument objXmlDoc = new XmlDocument();
objXmlDoc.Load(xmlPath);
XmlNode objNode = objXmlDoc.SelectSingleNode(MainNode);
XmlElement objElement = objXmlDoc.CreateElement(Element);
objElement.SetAttribute(Attrib, AttribContent);
objElement.InnerText = Content;
objNode.AppendChild(objElement);
objXmlDoc.Save(xmlPath);
}
#endregion
#region 插入一節(jié)點(diǎn)不帶屬性
public static void XmlInsertElement(string xmlPath, string MainNode, string Element, string Content)
{
XmlDocument objXmlDoc = new XmlDocument();
objXmlDoc.Load(xmlPath);
XmlNode objNode = objXmlDoc.SelectSingleNode(MainNode);
XmlElement objElement = objXmlDoc.CreateElement(Element);
objElement.InnerText = Content;
objNode.AppendChild(objElement);
objXmlDoc.Save(xmlPath);
}
#endregion
#region 向一個(gè)節(jié)點(diǎn)添加屬性
/// <summary>
/// 向一個(gè)節(jié)點(diǎn)添加屬性
/// </summary>
/// <param name="xmlPath">xml文件路徑</param>
/// <param name="NodePath">節(jié)點(diǎn)路徑</param>
/// <param name="NodeAttribute1">要添加的節(jié)點(diǎn)屬性的名稱</param>
/// <param name="NodeAttributeText">要添加屬性的值</param>
public static void AddAttribute(string xmlPath, string NodePath, string NodeAttribute1, string NodeAttributeText)
{
XmlDocument objXmlDoc = new XmlDocument();
objXmlDoc.Load(xmlPath);
XmlAttribute nodeAttribute = objXmlDoc.CreateAttribute(NodeAttribute1);
XmlNode nodePath = objXmlDoc.SelectSingleNode(NodePath);
nodePath.Attributes.Append(nodeAttribute);
XmlElement xe = (XmlElement)nodePath;
xe.SetAttribute(NodeAttribute1, NodeAttributeText);
objXmlDoc.Save(xmlPath);
}
#endregion
如想要加入一個(gè)member的父節(jié)點(diǎn),屬性id值為7你可以這樣來做:
//取得xml文件的路徑
string xmlPath = Server.MapPath("~/test.xml");
string parentNode="member";
//在根節(jié)點(diǎn)下添加父節(jié)點(diǎn)member
XmlHelper.AddParentNode(xmlPath, parentNode);
//剛添加的member節(jié)點(diǎn)添加一
XmlHelper.AddAttribute(xmlPath, "phonebook/member", "id", "7");
則xml文件就會(huì)變成這樣
<?xml version="1.0" encoding="utf-8"?>
<phonebook>
<member id="6">
<name>456</name>
<qq>5465</qq>
</member>
<member id="5">
<name>jjjjj</name>
<qq>3456789</qq>
</member>
<member id="7">
</member>
</phonebook>
向新添加的節(jié)點(diǎn)member(id=7)的節(jié)點(diǎn)下加入節(jié)點(diǎn)名稱為qq,值為123456的新節(jié)點(diǎn),你可以這樣做
XmlHelper.XmlInsertElement(xmlPath, "//member[@id="7"]", "qq", "123456"); 則輸出的xml為:
<?xml version="1.0" encoding="utf-8"?>
<phonebook>
<member id="6">
<name>456</name>
<qq>5465</qq>
</member>
<member id="5">
<name>jjjjj</name>
<qq>3456789</qq>
</member>
<member id="7">
<qq>123456</qq>
</member>
</phonebook> 增加節(jié)點(diǎn)我們就介紹到這里,只要你基本掌握了xpath語法,融會(huì)貫通,就可以利用上面幾個(gè)公用方法對(duì)xml文件進(jìn)行增加操作
下面我們介紹一下刪除操作,刪除共有兩種,一是刪除某一節(jié)點(diǎn),一種是刪除某一節(jié)點(diǎn)的屬性。可以使用的方法如下:
/**//// <summary>
/// 刪除XML節(jié)點(diǎn)和此節(jié)點(diǎn)下的子節(jié)點(diǎn)
/// </summary>
/// <param name="xmlPath">xml文檔路徑</param>
/// <param name="Node">節(jié)點(diǎn)路徑</param>
public static void XmlNodeDelete(string xmlPath, string Node)
{
XmlDocument objXmlDoc = new XmlDocument();
objXmlDoc.Load(xmlPath);
string mainNode = Node.Substring(0, Node.LastIndexOf("/"));
objXmlDoc.SelectSingleNode(mainNode).RemoveChild
(objXmlDoc.SelectSingleNode(Node));
objXmlDoc.Save(xmlPath);
}
刪除一個(gè)節(jié)點(diǎn)的屬性#region 刪除一個(gè)節(jié)點(diǎn)的屬性
/**//// <summary>
/// 刪除一個(gè)節(jié)點(diǎn)的屬性
/// </summary>
/// <param name="xmlPath">文件路徑</param>
/// <param name="NodePath">節(jié)點(diǎn)路徑(xpath)</param>
/// <param name="NodeAttribute">屬性名稱</param>
public static void xmlnNodeAttributeDel
(string xmlPath, string NodePath, string NodeAttribute)
{
XmlDocument objXmlDoc = new XmlDocument();
objXmlDoc.Load(xmlPath);
XmlNode nodePath = objXmlDoc.SelectSingleNode(NodePath);
XmlElement xe = (XmlElement)nodePath;
xe.RemoveAttribute(NodeAttribute);
objXmlDoc.Save(xmlPath);
}
#endregion 如要?jiǎng)h除屬性id值為5的節(jié)點(diǎn)(包括其子節(jié)點(diǎn)),我們可以這樣做:
string xmlPath = Server.MapPath("~/test.xml");
XmlHelper.XmlNodeDelete(xmlPath, "phonebook / member[@id="5"]"); 這時(shí)xml文件將變?yōu)椋?/p>
<?xml version="1.0" encoding="utf-8"?>
<phonebook>
<member id="6">
<name>456</name>
<qq>5465</qq>
</member>
<member id="5">
<name>jjjjj</name>
<qq>3456789</qq>
</member>
<member id="7">
<qq>123456</qq>
</member>
</phonebook> 假如我們向id=6的父節(jié)點(diǎn)下子節(jié)點(diǎn)qq節(jié)點(diǎn)加一屬性sex值為‘男‘,從上面可以看出這是可以可以做到的,則xml文件就變?yōu)椋?/p>
<?xml version="1.0" encoding="utf-8"?>
<phonebook>
<member id="6">
<name>456</name>
<qq sex='男'>5465</qq>
</member>
<member id="5">
<name>jjjjj</name>
<qq>3456789</qq>
</member>
<member id="7">
<qq>123456</qq>
</member>
</phonebook>
假如我們要?jiǎng)h除sex=“男”,我們可以這樣做 :
XmlHelper.xmlnNodeAttributeDel(xmlPath, "//member[qq='5465']/qq", 'sex');
//也可以
XmlHelper.xmlnNodeAttributeDel(xmlPath, "//member[@id='6']/qq", 'sex');
本站文章除注明轉(zhuǎn)載外,均為本站原創(chuàng)或翻譯。歡迎任何形式的轉(zhuǎn)載,但請(qǐng)務(wù)必注明出處、不得修改原文相關(guān)鏈接,如果存在內(nèi)容上的異議請(qǐng)郵件反饋至chenjj@fc6vip.cn
文章轉(zhuǎn)載自:網(wǎng)絡(luò)轉(zhuǎn)載