C#操作Xml全集示例篇,基本实现添加,删除,更新等操作

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;
            
ifthis.xmlFilePathType == enumXmlPathType.AbsolutePath )
            
{
                doc 
= GetXmlDocumentFromFile( xmlFilePath ) ;
            }

            
else ifthis.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 ;
        }

        读取指定节点的指定属性值
读取指定节点的指定属性值
 

        
...
        设置节点值
设置节点值
        设置节点的属性值
设置节点的属性值
        
/**//// <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文件
 
 
        保存XML文件
保存XML文件
 
    }

}


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 窗体设计器生成的代码
        
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 >
 
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值