C#里对xml文件进行修改,新增,删除,插入操作

已知有一个XML文件(bookstore.xml)如下:
<? xml version = " 1.0 "  encoding = " gb2312 " ?>
< bookstore >
< book genre = " fantasy "  ISBN = " 2-3631-4 " >
< title > Oberon ' s Legacy</title>
< author > Corets, Eva </ author >
< price > 5.95 </ price >
</ book >
</ bookstore >

1 、往 < bookstore > 节点中插入一个 < book > 节点:

XmlDocument xmlDoc
= new  XmlDocument();
xmlDoc.Load(
" bookstore.xml " );
XmlNode root
= xmlDoc.SelectSingleNode( " bookstore " ); // 查找<bookstore>
XmlElement xe1 = xmlDoc.CreateElement( " book " ); // 创建一个<book>节点
xe1.SetAttribute( " genre " , " 李赞红 " ); // 设置该节点genre属性
xe1.SetAttribute( " ISBN " , " 2-3631-4 " ); // 设置该节点ISBN属性

XmlElement xesub1
= xmlDoc.CreateElement( " title " );
xesub1.InnerText
= " CS从入门到精通 " ; // 设置文本节点
xe1.AppendChild(xesub1); // 添加到<book>节点中
XmlElement xesub2 = xmlDoc.CreateElement( " author " );
xesub2.InnerText
= " 候捷 " ;
xe1.AppendChild(xesub2);
XmlElement xesub3
= xmlDoc.CreateElement( " price " );
xesub3.InnerText
= " 58.3 " ;
xe1.AppendChild(xesub3);

root.AppendChild(xe1);
// 添加到<bookstore>节点中
xmlDoc.Save( " bookstore.xml " );

// ================
结果为:

<? xml version = " 1.0 "  encoding = " gb2312 " ?>
< bookstore >
< book genre = " fantasy "  ISBN = " 2-3631-4 " >
< title > Oberon ' s Legacy</title>
< author > Corets, Eva </ author >
< price > 5.95 </ price >
</ book >
< book genre = " 李赞红 "  ISBN = " 2-3631-4 " >
< title > CS从入门到精通 </ title >
< author > 候捷 </ author >
< price > 58.3 </ price >
</ book >
</ bookstore >

 

// 2、修改节点:将genre属性值为“李赞红“的节点的genre值改为“update李 // 赞红”,将该节点的子节点<author>的文本修改为“亚胜”。


XmlNodeList nodeList
= xmlDoc.SelectSingleNode( " bookstore " ).ChildNodes; // 获取bookstore节点的所有子节点
foreach (XmlNode xn  in  nodeList) // 遍历所有子节点
{
XmlElement xe
= (XmlElement)xn; // 将子节点类型转换为XmlElement类型
if (xe.GetAttribute( " genre " ) == " 李赞红 " ) // 如果genre属性值为“李赞红”
{
xe.SetAttribute(
" genre " , " update李赞红 " ); // 则修改该属性为“update李赞红”

XmlNodeList nls
= xe.ChildNodes; // 继续获取xe子节点的所有子节点   
foreach (XmlNode xn1  in  nls) // 遍历
{
XmlElement xe2
= (XmlElement)xn1; // 转换类型
if (xe2.Name == " author " ) // 如果找到
{
xe2.InnerText
= " 亚胜 " ; // 则修改
break ; // 找到退出来就可以了
}
}
break ;
}
}

xmlDoc.Save(
" bookstore.xml " ); // 保存。

 


// =================

// 最后结果为:


<? xml version = " 1.0 "  encoding = " gb2312 " ?>
< bookstore >
< book genre = " fantasy "  ISBN = " 2-3631-4 " >
< title > Oberon ' s Legacy</title>
< author > Corets, Eva </ author >
< price > 5.95 </ price >
</ book >
< book genre = " update李赞红 "  ISBN = " 2-3631-4 " >
< title > CS从入门到精通 </ title >
< author > 亚胜 </ author >
< price > 58.3 </ price >
</ book >
</ bookstore >

 


// 3、删除 <book genre="fantasy" ISBN="2-3631-4">节点的genre属 // 性,删除 <book genre="update李赞红" ISBN="2-3631-4">节点。


XmlNodeList xnl
= xmlDoc.SelectSingleNode( " bookstore " ).ChildNodes;

foreach (XmlNode xn  in  xnl)
{
XmlElement xe
= (XmlElement)xn;

if (xe.GetAttribute( " genre " ) == " fantasy " )
{
xe.RemoveAttribute(
" genre " ); // 删除genre属性
}
else   if (xe.GetAttribute( " genre " ) == " update李赞红 " )
{
xe.RemoveAll();
// 删除该节点的全部内容
}
}
xmlDoc.Save(
" bookstore.xml " );

 

// ====================

// 最后结果为:


<? xml version = " 1.0 "  encoding = " gb2312 " ?>
< bookstore >
< book ISBN = " 2-3631-4 " >
< title > Oberon ' s Legacy</title>
< author > Corets, Eva </ author >
< price > 5.95 </ price >
</ book >
< book >
</ book >
</ bookstore >  


// 4、显示所有数据。


XmlNode xn
= xmlDoc.SelectSingleNode( " bookstore " );

XmlNodeList xnl
= xn.ChildNodes;

foreach (XmlNode xnf  in  xnl)
{
XmlElement xe
= (XmlElement)xnf;
Console.WriteLine(xe.GetAttribute(
" genre " )); // 显示属性值
Console.WriteLine(xe.GetAttribute( " ISBN " ));

XmlNodeList xnf1
= xe.ChildNodes;
foreach (XmlNode xn2  in  xnf1)
{
Console.WriteLine(xn2.InnerText);
// 显示子节点点文本
}



另有:
using  System;
using  System.IO;
using  System.Web;
using  System.Text;
using  System.Xml;
using  System.Collections;

 
namespace  ShopWeb.Class
{
 
///   <summary>
 
///  Log 的摘要说明。
 
///   </summary>
  public   class  Log
 {
  
private  XmlDocument xmlLog = new  XmlDocument();
  
private  HttpContext context = HttpContext.Current;
  
private   string   xmlPath = "" ;
  
///   <summary>
  
///  构造函数
  
///   </summary>
  
///   <param name="XmlPath"></param>
   public  Log( string  XmlPath)
  {
    
   xmlPath
= XmlPath;
   xmlLog.Load(context.Server.MapPath(XmlPath));
  }
  
///   <summary>
  
///  增加一个节点,该节点由子节点构成
  
///   </summary>
  
///   <param name="HTChilds"></param>
  
///   <param name="ParentName"></param>
  
///   <returns></returns>
   public   bool  AddNodeByChild(Hashtable HTChilds , string  ParentName)
  {
   
try
   {

    XmlNode Parent
= xmlLog.CreateElement(ParentName);
                XmlNode Child;
    IDictionaryEnumerator myEnumerator
= HTChilds.GetEnumerator();
   
    
while (myEnumerator.MoveNext())
    {
     Child
= xmlLog.CreateElement(myEnumerator.Key.ToString());
     Child.InnerText
= myEnumerator.Value.ToString();
     Parent.AppendChild(Child);
     xmlLog.DocumentElement.AppendChild(Parent);

    }
    xmlLog.Save(context.Server.MapPath(xmlPath));
    
return   true ;
   }
   
catch
   {
    
return   false ;

   }
   

  }
  
///   <summary>
  
///   增加一个节点 该节点由属性构成
  
///   </summary>
  
///   <param name="htAttributes"></param>
  
///   <param name="NodeName"></param>
  
///   <returns></returns>
   public   bool  AddNodeByAttribute(Hashtable htAttributes, string  NodeName)
  {
  
try
   {
   XmlNode AddNode
= xmlLog.CreateElement(NodeName);
   IDictionaryEnumerator myEnumerator
= htAttributes.GetEnumerator();
   XmlAttribute atr;
   
while (myEnumerator.MoveNext())
   {
    atr
= xmlLog.CreateAttribute(myEnumerator.Key.ToString());
    atr.InnerText
= myEnumerator.Value.ToString();
    AddNode.Attributes.Append(atr);
    xmlLog.DocumentElement.AppendChild(AddNode);

   }
   xmlLog.Save(context.Server.MapPath(xmlPath));
   
return   true ;
  }
  
catch
  {
   
return   false ;

  }


  }
  
///   <summary>
  
///  或得指定查询节点得子节点数目
  
///   </summary>
  
///   <param name="QueryPath"></param>
  
///   <returns></returns>
   public   int  ChildCount( string  QueryPath)
  {
   
try
   {
    XmlNode ResultNodes
= xmlLog.SelectSingleNode(QueryPath);
    
return  ResultNodes.ChildNodes.Count;

   }
   
catch
   {
    
return   - 1 ;

   }
   
  }
     
///   <summary>
     
///   删除指定路径的节点
     
///   </summary>
     
///   <param name="QueryPath"></param>
     
///   <returns></returns>
   public   bool  DelelteNode( string  QueryPath)
  {
   
try
   {
    XmlNodeList ResultNodes
= xmlLog.SelectNodes(QueryPath);
    
for ( int  i = 0 ;i < ResultNodes.Count;i ++ )
    {
     XmlNode ParentNode
= ResultNodes[i].ParentNode;
     ParentNode.RemoveChild(ResultNodes[i]);

    }
    xmlLog.Save(context.Server.MapPath(xmlPath));
    
return   true ;

   }
   
catch
   {
    
return   false ;
   }
   
  }
     
///   <summary>
     
///  查询节点
     
///   </summary>
     
///   <param name="QueryPath"></param>
     
///   <returns></returns>
   public  XmlNodeList QueryNode( string  QueryPath)
  {
   
try
   {
    XmlNodeList ResultNodes
= xmlLog.SelectNodes(QueryPath);
    
return  ResultNodes;
   }
   
catch
   {
    
return   null ;
   }
   

  }
 }
}



转载于:https://www.cnblogs.com/spark_wu/archive/2009/07/28/1532900.html

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值