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

来源:互联网 发布:cacti syslog无数据 编辑:程序博客网 时间:2024/05/21 15:02
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>