using System; using System.Xml; using System.Xml.Xsl; using System.Xml.XPath; using System.Web; namespace Library.ClassLibrary.XML ... { /**//**//**//// <summary> /// xml 的摘要说明。 /// </summary> public class XML ...{ public enum enumXmlPathType ...{ AbsolutePath, VirtualPath } private string xmlFilePath ; private enumXmlPathType xmlFilePathType ; private XmlDocument xmlDoc = new XmlDocument() ; public string XmlFilePath ...{ set ...{ xmlFilePath = value ; } } public enumXmlPathType XmlFilePathTyp ...{ set ...{ xmlFilePathType = value ; } } public XML( string tempXmlFilePath ) ...{ // // TODO: 在此处添加构造函数逻辑 // this.xmlFilePathType = enumXmlPathType.VirtualPath ; this.xmlFilePath = tempXmlFilePath ; GetXmlDocument() ; //xmlDoc.Load( xmlFilePath ) ; } public XML( string tempXmlFilePath , enumXmlPathType tempXmlFilePathType ) ...{ // // TODO: 在此处添加构造函数逻辑 // this.xmlFilePathType = tempXmlFilePathType ; this.xmlFilePath = tempXmlFilePath ; GetXmlDocument() ; } /**//**//**//// </summary> /// <param name="strEntityTypeName">实体类的名称</param> /// <returns>指定的XML描述文件的路径</returns> private XmlDocument GetXmlDocument() ...{ XmlDocument doc=null; if( this.xmlFilePathType == enumXmlPathType.AbsolutePath ) ...{ doc = GetXmlDocumentFromFile( xmlFilePath ) ; } else if( this.xmlFilePathType == enumXmlPathType.VirtualPath ) ...{ doc = GetXmlDocumentFromFile(HttpContext.Current.Server.MapPath(xmlFilePath)) ; } return doc; } private XmlDocument GetXmlDocumentFromFile(string tempXmlFilePath) ...{ string xmlFileFullPath = tempXmlFilePath ; xmlDoc.Load(xmlFileFullPath) ; return xmlDoc ; } 读取指定节点的指定属性值读取指定节点的指定属性值#region 读取指定节点的指定属性值 /**//**//**//// <summary> /// 功能: /// 读取指定节点的指定属性值 /// /// 参数: /// 参数一:节点名称 /// 参数二:此节点的属性 /// </summary> /// <param name="strNode"></param> /// <param name="strAttribute"></param> /// <returns></returns> public string GetXmlNodeValue(string strNode,string strAttribute) ...{ string strReturn = ""; try ...{ //根据指定路径获取节点 XmlNode xmlNode = xmlDoc.SelectSingleNode(strNode) ; //获取节点的属性,并循环取出需要的属性值 XmlAttributeCollection xmlAttr = xmlNode.Attributes ; for(int i=0 ;i<xmlAttr.Count; i++) ...{ if (xmlAttr.Item(i).Name == strAttribute) strReturn = xmlAttr.Item(i).Value ; } } catch(XmlException xmle) ...{ throw xmle ; } return strReturn ; } #endregion ...#region /**//**//**//// <summary> /// 功能: /// 读取指定节点的值 /// /// 参数: /// 参数:节点名称 /// </summary> /// <param name="strNode"></param> /// <returns></returns> public string GetXmlNodeValue(string strNode) ...{ string strReturn = String.Empty ; try ...{ //根据路径获取节点 XmlNode xmlNode = xmlDoc.SelectSingleNode(strNode) ; strReturn = xmlNode.InnerText ; } catch(XmlException xmle) ...{ System.Console.WriteLine(xmle.Message) ; } return strReturn ; } #endregion 设置节点值设置节点值#region 设置节点值 /**//**//**//// <summary> /// 功能: /// 设置节点值 /// /// 参数: /// 参数一:节点的名称 /// 参数二:节点值 /// /// </summary> /// <param name="strNode"></param> /// <param name="newValue"></param> public void SetXmlNodeValue(string xmlNodePath,string xmlNodeValue) ...{ try ...{ //根据指定路径获取节点 XmlNode xmlNode = xmlDoc.SelectSingleNode(xmlNodePath) ; //设置节点值 xmlNode.InnerText = xmlNodeValue ; } catch(XmlException xmle) ...{ throw xmle ; } } #endregion 设置节点的属性值设置节点的属性值#region 设置节点的属性值 /**//**//**//// <summary> /// 功能: /// 设置节点的属性值 /// /// 参数: /// 参数一:节点名称 /// 参数二:属性名称 /// 参数三:属性值 /// /// </summary> /// <param name="xmlNodePath"></param> /// <param name="xmlNodeAttribute"></param> /// <param name="xmlNodeAttributeValue"></param> public void SetXmlNodeValue(string xmlNodePath,string xmlNodeAttribute,string xmlNodeAttributeValue) ...{ try ...{ //根据指定路径获取节点 XmlNode xmlNode = xmlDoc.SelectSingleNode(xmlNodePath) ; //获取节点的属性,并循环取出需要的属性值 XmlAttributeCollection xmlAttr = xmlNode.Attributes ; for(int i=0 ; i<xmlAttr.Count ; i++) ...{ if ( xmlAttr.Item(i).Name == xmlNodeAttribute ) ...{ xmlAttr.Item(i).Value = xmlNodeAttributeValue; break ; } } } catch(XmlException xmle) ...{ throw xmle ; } } #endregion /**//**//**//// <summary> /// 获取XML文件的根元素 /// </summary> public XmlNode GetXmlRoot() ...{ return xmlDoc.DocumentElement ; } /**//**//**//// <summary> /// 在根节点下添加父节点 /// </summary> public void AddParentNode(string parentNode) ...{ XmlNode root = GetXmlRoot() ; XmlNode parentXmlNode = xmlDoc.CreateElement(parentNode) ; root.AppendChild(parentXmlNode) ; } /**//**//**//// <summary> /// 向一个已经存在的父节点中插入一个子节点 /// </summary> public void AddChildNode( string parentNodePath,string childNodePath ) ...{ XmlNode parentXmlNode = xmlDoc.SelectSingleNode(parentNodePath) ; XmlNode childXmlNode = xmlDoc.CreateElement(childNodePath) ; parentXmlNode.AppendChild( childXmlNode ) ; } /**//**//**//// <summary> /// 向一个节点添加属性 /// </summary> public void AddAttribute( string NodePath , string NodeAttribute) ...{ XmlAttribute nodeAttribute = xmlDoc.CreateAttribute(NodeAttribute) ; XmlNode nodePath = xmlDoc.SelectSingleNode( NodePath ) ; nodePath.Attributes.Append(nodeAttribute) ; } /**//**//**//// <summary> /// 删除一个节点的属性 /// </summary> public void DeleteAttribute( string NodePath , string NodeAttribute , string NodeAttributeValue) ...{ XmlNodeList nodePath = xmlDoc.SelectSingleNode( NodePath ).ChildNodes; foreach(XmlNode xn in nodePath) ...{ XmlElement xe=(XmlElement)xn; if(xe.GetAttribute(NodeAttribute)==NodeAttributeValue) ...{ xe.RemoveAttribute(NodeAttribute);//删除属性 } } } /**//**//**//// <summary> /// 删除一个节点 /// </summary> public void DeleteXmlNode(string tempXmlNode) ...{ //XmlNodeList xmlNodePath=xmlDoc.SelectSingleNode(tempXmlNode).ChildNodes; XmlNode xmlNodePath = xmlDoc.SelectSingleNode( tempXmlNode ) ; xmlNodePath.ParentNode.RemoveChild( xmlNodePath ) ; //foreach(XmlNode xn in xmlNodePath) //{ //XmlElement xe=(XmlElement)xn; //xe.RemoveAll(); //xe.RemoveChild(xn); //xn.RemoveAll(); //if(xe.HasChildNodes) //{ //foreach(XmlNode xn in xe) //{ //xn.RemoveAll();//删除所有子节点和属性 //} //} //} } 保存XML文件保存XML文件#region 保存XML文件 /**//**//**//// <summary> /// 功能: /// 保存XML文件 /// /// </summary> public void SaveXmlDocument() ...{ try ...{ //保存设置的结果 xmlDoc.Save( HttpContext.Current.Server.MapPath( xmlFilePath ) ); } catch(XmlException xmle) ...{ throw xmle; } } #endregion 保存XML文件保存XML文件#region 保存XML文件 /**//**//**//// <summary> /// 功能: /// 保存XML文件 /// /// </summary> public void SaveXmlDocument(string tempXMLFilePath) ...{ try ...{ //保存设置的结果 xmlDoc.Save(tempXMLFilePath); } catch(XmlException xmle) ...{ throw xmle; } } #endregion }} XmlAction.aspx文件 <% @ Page language = " c# " Codebehind = " XmlAction.aspx.cs " AutoEventWireup = " false " Inherits = " Web.Club.Xml2004.XmlAction " %> <! DOCTYPE HTML PUBLIC " -//W3C//DTD HTML 4.0 Transitional//EN " > < HTML > < HEAD > < title > test </ title > < meta name = " GENERATOR " Content = " Microsoft Visual Studio .NET 7.1 " > < meta name = " CODE_LANGUAGE " Content = " C# " > < meta name = " vs_defaultClientScript " content = " JavaScript " > < meta name = " vs_targetSchema " content = " http://schemas.microsoft.com/intellisense/ie5 " > </ HEAD > < body MS_POSITIONING = " GridLayout " > < form id = " Form1 " method = " post " runat = " server " > < asp:Button id = " btnAdd " style = " Z-INDEX: 101; LEFT: 32px; POSITION: absolute; TOP: 88px " runat = " server " Text = " 添加Data节点 " ></ asp:Button > < asp:Button id = " btnDelete " style = " Z-INDEX: 102; LEFT: 176px; POSITION: absolute; TOP: 88px " runat = " server " Text = " 删除最后一个节点 " ></ asp:Button > < asp:Button id = " btnModify " style = " Z-INDEX: 103; LEFT: 360px; POSITION: absolute; TOP: 88px " runat = " server " Width = " 144px " Text = " 修改节点值 " ></ asp:Button > < asp:Button id = " btnModifyAttribute " style = " Z-INDEX: 104; LEFT: 368px; POSITION: absolute; TOP: 136px " runat = " server " Width = " 136px " Height = " 24px " Text = " 修改节点的属性值 " ></ asp:Button > </ form > </ body > </ HTML > XmlAction.cs文件 using System; using System.Collections; using System.ComponentModel; using System.Data; using System.Drawing; using System.Web; using System.Web.SessionState; using System.Web.UI; using System.Web.UI.WebControls; using System.Web.UI.HtmlControls; using Library.ClassLibrary.XML; namespace Web.Club.Xml2004 ... { /**//**//**//// <summary> /// test 的摘要说明。 /// </summary> public class XmlAction : System.Web.UI.Page ...{ protected System.Web.UI.WebControls.Button btnAdd; protected System.Web.UI.WebControls.Button btnDelete; protected System.Web.UI.WebControls.Button btnModify; protected System.Web.UI.WebControls.Button btnModifyAttribute; protected XML myXML; private void Page_Load(object sender, System.EventArgs e) ...{ // 在此处放置用户代码以初始化页面 myXML=new XML("test.xml"); } Web 窗体设计器生成的代码Web 窗体设计器生成的代码#region Web 窗体设计器生成的代码 override protected void OnInit(EventArgs e) ...{ // // CODEGEN: 该调用是 ASP.NET Web 窗体设计器所必需的。 // InitializeComponent(); base.OnInit(e); } /**//**//**//// <summary> /// 设计器支持所需的方法 - 不要使用代码编辑器修改 /// 此方法的内容。 /// </summary> private void InitializeComponent() ...{ this.btnAdd.Click += new System.EventHandler(this.btnAdd_OnClick); this.btnDelete.Click += new System.EventHandler(this.btnDelete_OnClick); this.btnModify.Click += new System.EventHandler(this.btnModifyNode_OnClick); this.btnModifyAttribute.Click += new System.EventHandler(this.btnModifyAttribute_OnClick); this.Load += new System.EventHandler(this.Page_Load); } #endregion private void btnAdd_OnClick(object sender, System.EventArgs e) ...{ string tempDates = System.DateTime.Now.ToString(); myXML.AddParentNode("Data"); myXML.AddChildNode("//Data[last()]","Id"); myXML.SetXmlNodeValue("//Data[last()]/Id",Session.SessionID.ToString()+Guid.NewGuid().ToString()); myXML.AddChildNode("//Data[last()]","Subject"); myXML.SetXmlNodeValue("//Data[last()]/Subject","这是第一个测试"); myXML.AddChildNode("//Data[last()]","Content"); myXML.SetXmlNodeValue("//Data[last()]/Content","好象还是有点问题,添加节点的时候XPath有点麻烦!"); myXML.AddChildNode("//Data[last()]","Img"); myXML.AddAttribute("//Data[last()]/Img","hasImg"); myXML.SetXmlNodeValue("//Data[last()]/Img","hasImg","1"); myXML.AddChildNode("//Data[last()]/Img","ImgUrl"); myXML.SetXmlNodeValue("//Data[last()]/Img/ImgUrl","http://172.16.26.99/text.jpg"); myXML.AddChildNode("//Data[last()]","Dates"); myXML.SetXmlNodeValue("//Data[last()]/Dates",tempDates); myXML.SaveXmlDocument(); } private void btnDelete_OnClick(object sender, System.EventArgs e) ...{ myXML.DeleteXmlNode("//Data[last()]"); myXML.SaveXmlDocument(); } private void btnModifyNode_OnClick(object sender, System.EventArgs e) ...{ myXML.SetXmlNodeValue("//Data[last()]/Subject","已经被修改"); myXML.SaveXmlDocument(); } private void btnModifyAttribute_OnClick(object sender, System.EventArgs e) ...{ myXML.SetXmlNodeValue("//Data[last()]/Img","hasImg","0"); myXML.SaveXmlDocument(); } }} XmlAction.sxd文件 <? xml version = " 1.0 " encoding = " utf-8 " ?> < xs:schema id = " testSchema " targetNamespace = " http://tempuri.org/testSchema.xsd " elementFormDefault = " qualified " xmlns = " http://tempuri.org/testSchema.xsd " xmlns:mstns = " http://tempuri.org/testSchema.xsd " xmlns:xs = " http://www.w3.org/2001/XMLSchema " > < xs:element name = " Blog " > < xs:complexType > < xs:sequence > < xs:element name = " Id " type = " xs:int " ></ xs:element > < xs:element name = " Subject " type = " xs:string " /> < xs:element name = " Content " type = " xs:string " /> < xs:element name = " Img " > < xs:complexType > < xs:sequence > < xs:element name = " ImgUrl " /> </ xs:sequence > < xs:attribute name = " hasImg " type = " xs:int " /> </ xs:complexType > </ xs:element > < xs:element name = " Dates " type = " xs:dateTime " /> </ xs:sequence > </ xs:complexType > </ xs:element > </ xs:schema > XmlAction.xml文件 <? xml version = " 1.0 " encoding = " utf-8 " ?> < Blog > < Data > < Id > 0 </ Id > < Subject > My First Test </ Subject > < Content > OK </ Content > < Img hasImg = " 1 " > < ImgUrl > http: // 172.16.26.99/test.jpg</ImgUrl> </ Img > < Dates > 2004 - 08 - 14 </ Dates > </ Data > < Data > < Id > 2dah53nr5viplyqga5w5ws45e0573bec - 69be - 4e5c - 9ac5 - bb028adbe98f </ Id > < Subject > 这是第一个测试 </ Subject > < Content > 好象还是有点问题,添加节点的时候XPath有点麻烦 !</ Content > < Img hasImg = " 1 " > < ImgUrl > http: // 172.16.26.99/text.jpg</ImgUrl> </ Img > < Dates > 2004 - 8 - 18 23 : 04 : 07 </ Dates > </ Data > < Data > < Id > 2dah53nr5viplyqga5w5ws45653396b4 - cf18 - 4288 - 966d - fa6385033fb1 </ Id > < Subject > 这是第一个测试 </ Subject > < Content > 好象还是有点问题,添加节点的时候XPath有点麻烦 !</ Content > < Img hasImg = " 1 " > < ImgUrl > http: // 172.16.26.99/text.jpg</ImgUrl> </ Img > < Dates > 2004 - 8 - 18 23 : 04 : 10 </ Dates > </ Data > < Data > < Id > 2dah53nr5viplyqga5w5ws45b6f03405 - 4c0d - 4ba5 - bba5 - 12e42b211dac </ Id > < Subject > 这是第一个测试 </ Subject > < Content > 好象还是有点问题,添加节点的时候XPath有点麻烦 !</ Content > < Img hasImg = " 0 " > < ImgUrl > http: // 172.16.26.99/text.jpg</ImgUrl> </ Img > < Dates > 2004 - 8 - 18 23 : 04 : 11 </ Dates > </ Data > </ Blog >