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文件#region 保存XML文件
/**//// <summary>
/// 功能:
/// 保存XML文件
///
/// </summary>
public void SaveXmlDocument()
...{
try
...{
//保存设置的结果
xmlDoc.Save( HttpContext.Current.Server.MapPath( xmlFilePath ) );
}
catch(XmlException xmle)
...{
throw xmle;
}
}
#endregion
保存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 窗体设计器生成的代码#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>
http://blog.csdn.net/lg836/archive/2007/07/01/1674814.aspx