轉帖|其它|編輯:郝浩|2011-06-08 14:18:24.000|閱讀 667 次
概述:上一帖我們已經對xpath語法進行了簡單的介紹,對xml文件的和操作數據庫有一些相同之處,同樣是增,刪,改,查四種操作。現在我們就詳細介紹一下增和刪兩種操作。看下面的一個xml示例:
# 界面/圖表報表/文檔/IDE等千款熱門軟控件火熱銷售中 >>
上一帖我們已經對xpath語法進行了簡單的介紹,對xml文件的和操作數據庫有一些相同之處,同樣是增,刪,改,查四種操作。現在我們就詳細介紹一下增和刪兩種操作。看下面的一個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的每個節點分為節點名稱,節點值和屬性三類,如:member節點:id為其一個屬性,menber為其節點名稱。再如:name節點456為其節點值。
如果我們需要增加一個節點可以調用一下幾個方法:
/// <summary>
/// 在根節點下添加父節點
/// </summary>
public static void AddParentNode(string xmlPath,string parentNode)
{
XmlDocument xdoc = new XmlDocument();
xdoc.Load(xmlPath);
// 創建一個新的menber節點并將它添加到根節點下
XmlElement Node = xdoc.CreateElement(parentNode);
xdoc.DocumentElement.PrependChild(Node);
xdoc.Save(xmlPath);
}
#region 插入一節點,帶一屬性
/// <summary>
/// 插入一節點,帶一屬性
/// </summary>
/// <param name="xmlPath">Xml文檔路徑</param>
/// <param name="MainNode">當前節點路徑</param>
/// <param name="Element">新節點</param>
/// <param name="Attrib">屬性名稱</param>
/// <param name="AttribContent">屬性值</param>
/// <param name="Content">新節點值</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 插入一節點不帶屬性
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 向一個節點添加屬性
/// <summary>
/// 向一個節點添加屬性
/// </summary>
/// <param name="xmlPath">xml文件路徑</param>
/// <param name="NodePath">節點路徑</param>
/// <param name="NodeAttribute1">要添加的節點屬性的名稱</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
如想要加入一個member的父節點,屬性id值為7你可以這樣來做:
//取得xml文件的路徑
string xmlPath = Server.MapPath("~/test.xml");
string parentNode="member";
//在根節點下添加父節點member
XmlHelper.AddParentNode(xmlPath, parentNode);
//剛添加的member節點添加一
XmlHelper.AddAttribute(xmlPath, "phonebook/member", "id", "7");
則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">
</member>
</phonebook>
向新添加的節點member(id=7)的節點下加入節點名稱為qq,值為123456的新節點,你可以這樣做
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> 增加節點我們就介紹到這里,只要你基本掌握了xpath語法,融會貫通,就可以利用上面幾個公用方法對xml文件進行增加操作
下面我們介紹一下刪除操作,刪除共有兩種,一是刪除某一節點,一種是刪除某一節點的屬性。可以使用的方法如下:
/**//// <summary>
/// 刪除XML節點和此節點下的子節點
/// </summary>
/// <param name="xmlPath">xml文檔路徑</param>
/// <param name="Node">節點路徑</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);
}
刪除一個節點的屬性#region 刪除一個節點的屬性
/**//// <summary>
/// 刪除一個節點的屬性
/// </summary>
/// <param name="xmlPath">文件路徑</param>
/// <param name="NodePath">節點路徑(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 如要刪除屬性id值為5的節點(包括其子節點),我們可以這樣做:
string xmlPath = Server.MapPath("~/test.xml");
XmlHelper.XmlNodeDelete(xmlPath, "phonebook / member[@id="5"]"); 這時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> 假如我們向id=6的父節點下子節點qq節點加一屬性sex值為‘男‘,從上面可以看出這是可以可以做到的,則xml文件就變為:
<?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>
假如我們要刪除sex=“男”,我們可以這樣做 :
XmlHelper.xmlnNodeAttributeDel(xmlPath, "//member[qq='5465']/qq", 'sex');
//也可以
XmlHelper.xmlnNodeAttributeDel(xmlPath, "//member[@id='6']/qq", 'sex');
本站文章除注明轉載外,均為本站原創或翻譯。歡迎任何形式的轉載,但請務必注明出處、不得修改原文相關鏈接,如果存在內容上的異議請郵件反饋至chenjj@fc6vip.cn
文章轉載自:網絡轉載