asp.net 实现对xml文件的 读取,添加,删除,修改
用于修改站内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","RevengeBoy");//设置该节点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="RevengeBoy" ISBN="2-3631-4">
<title>CS从入门到精通</title>
<author>候捷</author>
<price>58.3</price>
</book>
</bookstore>
2、修改节点:将genre属性值为“RevengeBoy“的节点的genre值改为“updateRevengeBoy”,将该节点的子节点<author>的文本修改为“亚胜”。
XmlNodeList nodeList=xmlDoc.SelectSingleNode("bookstore").ChildNodes;//获取bookstore节点的所有子节点
foreach(XmlNode xn in nodeList)//遍历所有子节点
{
XmlElement xe=(XmlElement)xn;//将子节点类型转换为XmlElement类型
if(xe.GetAttribute("genre")=="RevengeBoy")//如果genre属性值为“RevengeBoy”
{
xe.SetAttribute("genre","updateRevengeBoy");//则修改该属性为“updateRevengeBoy”
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="updateRevengeBoy" 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="updateRevengeBoy" 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")=="updateRevengeBoy")
{
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.Data;
using System.Configuration;
using System.Collections;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;
using System.Xml;
using System.Xml.XPath;
using System.Runtime.InteropServices;
public partial class _Default : System.Web.UI.Page
{
DataTable dtList ;
DataRow dr;
[DllImport("kernel32.dll")]
static extern bool SetFileAttributes(string lpFileName, uint dwFileAttributes);
public DataTable MakeTable(string tbName)
{
// Create a DataTable.
DataTable table = new DataTable(tbName);
// Create a DataColumn and set various properties.
DataColumn column = new DataColumn();
column.DataType = System.Type.GetType("System.String");
column.AllowDBNull = false;
column.Caption = "ProductId";
column.ColumnName = "ProductId";
// Add the column to the table.
table.Columns.Add(column);
DataColumn column1 = new DataColumn();
column1.DataType = System.Type.GetType("System.String");
column1.Caption = "Title";
column1.ColumnName = "Title";
// Add the column to the table.
table.Columns.Add(column1);
DataColumn column2 = new DataColumn();
column2.DataType = System.Type.GetType("System.String");
column2.Caption = "TagLine";
column2.ColumnName = "TagLine";
// Add the column to the table.
table.Columns.Add(column2);
DataColumn column3 = new DataColumn();
column3.DataType = System.Type.GetType("System.String");
column3.Caption = "Image";
column3.ColumnName = "Image";
// Add the column to the table.
table.Columns.Add(column3);
DataColumn column4 = new DataColumn();
column4.DataType = System.Type.GetType("System.String");
column4.Caption = "ProductInfo";
column4.ColumnName = "ProductInfo";
// Add the column to the table.
table.Columns.Add(column4);
return table;
}
protected void Page_Load(object sender, EventArgs e)
{
if (!Page.IsPostBack)
{
this.ProductId.Visible = false;
this.ProductIdTB.Visible = false;
Bind();
this.DropDownList1.DataSource = dtList;
this.DropDownList1.Items.Clear();
this.DropDownList1.DataTextField = "Title";
this.DropDownList1.DataValueField = "ProductId";
this.DropDownList1.DataBind();
}
}
private void Bind()
{
dtList = MakeTable("Product");
XPathDocument doc = new XPathDocument(Server.MapPath("Helpme.xml"));
XPathNavigator navigator = doc.CreateNavigator();
foreach (XPathNavigator nav in navigator.Select("/Products/Product"))
{
do
{
//Find the first element.
if (nav.NodeType == XPathNodeType.Element)
{
//Determine whether children exist.
if (nav.HasChildren == true)
{
dr = dtList.NewRow();
//Move to the first child.
nav.MoveToFirstChild();
//Loop through all the children.
do
{
if (nav.Name == "ProductId")
dr["ProductId"] = nav.Value;
if (nav.Name == "Title")
dr["Title"] = nav.Value;
if (nav.Name == "TagLine")
dr["TagLine"] = nav.Value;
if (nav.Name == "Image")
dr["Image"] = nav.Value;
if (nav.Name == "ProductInfo")
dr["ProductInfo"] = nav.Value;
} while (nav.MoveToNext());
dtList.Rows.Add(dr);
}
}
} while (nav.MoveToNext());
}
}
protected void Button1_Click(object sender, EventArgs e)
{
string rootFolder = Server.MapPath("Helpme.xml");
XmlDocument doc = new XmlDocument();
doc.Load(rootFolder);
XPathNavigator navigator = doc.CreateNavigator();
foreach (XPathNavigator nav in navigator.Select("/Products/Product"))
{
do
{
//Determine whether children exist.
if (nav.HasChildren == true)
{
nav.MoveToFirstChild();
//Loop through all the children.
do
{
if (nav.Name == "ProductId")
{
if(nav.Value== this.DropDownList1.SelectedValue.Trim())
{
do
{
if (nav.Name == "Title")
nav.SetValue(this.titleTB.Text);
if (nav.Name == "TagLine")
nav.SetValue(this.TagLineTB.Text);
if (nav.Name == "Image")
nav.SetValue(this.ImageTB.Text);
if (nav.Name == "ProductInfo")
nav.SetValue(this.ProductInfoTB.Text);
}
while (nav.MoveToNext());
}
}
}
while (nav.MoveToNext());
}
}
while (nav.MoveToNext());
}
SetFileAttributes(rootFolder, (uint)0);//修改文件属性,去掉所有属性!
SetFileAttributes(rootFolder, (uint)128); // FILE_ATTRIBUTE_NORMAL
doc.Save(rootFolder);
}
protected void DropDownList1_SelectedIndexChanged(object sender, EventArgs e)
{
this.TextBox1.Text = this.DropDownList1.SelectedValue.Trim();
Bind();
DataView dv = dtList.DefaultView;
dv.RowFilter = "ProductId = '" + this.DropDownList1.SelectedValue.Trim() + "'";
this.titleTB.Text = dv[0].Row["Title"].ToString();
this.TagLineTB.Text = dv[0].Row["TagLine"].ToString();
this.ImageTB.Text = dv[0].Row["Image"].ToString();
this.ProductInfoTB.Text = dv[0].Row["ProductInfo"].ToString();
}
protected void BtnIns_Click(object sender, EventArgs e)
{
this.ProductId.Visible = true;
this.ProductIdTB.Visible = true;
string rootFolder =Server.MapPath( "Helpme.xml");
string pid = this.ProductIdTB.Text;
string tit = this.titleTB.Text;
string tag = this.TagLineTB.Text;
string Img = this.ImageTB.Text;
string pinfo = this.ProductInfoTB.Text;
if(pid != string.Empty&&tit != string.Empty&&tag !=string.Empty&&Img != string.Empty&&pinfo != string.Empty)
{
XmlDocument doc = new XmlDocument();
doc.Load(rootFolder);
XmlNode root = doc.DocumentElement;
XmlNode pr = doc.CreateElement("Product");
//Create new nodes.
XmlNode elem = doc.CreateElement("ProductId");
elem.InnerText = pid;
XmlNode title = doc.CreateElement("Title");
title.InnerText = tit;
XmlNode tl = doc.CreateElement("TagLine");
tl.InnerText = tag;
XmlNode ima = doc.CreateElement("Image");
ima.InnerText = Img;
XmlNode prin = doc.CreateElement("ProductInfo");
prin.InnerText = pinfo;
//Add the node to the document.
pr.InsertAfter(prin, pr.NextSibling);
pr.InsertAfter(ima, pr.NextSibling);
pr.InsertAfter(tl, pr.NextSibling);
pr.InsertAfter(title, pr.NextSibling);
pr.InsertBefore(elem, pr.FirstChild);
root.InsertBefore(pr, root.FirstChild);
SetFileAttributes(rootFolder, (uint)0);//修改文件属性,去掉所有属性!
SetFileAttributes(rootFolder, (uint)128); // FILE_ATTRIBUTE_NORMAL
doc.Save(rootFolder);
}
}
protected void DelBtn_Click(object sender, EventArgs e)
{
string rootFolder =Server.MapPath( "Helpme.xml");
XmlDocument doc = new XmlDocument();
doc.Load(rootFolder);
XPathNavigator navigator = doc.CreateNavigator();
foreach (XPathNavigator nav in navigator.Select("/Products/Product"))
{
do
{
//Determine whether children exist.
if (nav.HasChildren == true)
{
nav.MoveToFirstChild();
//Loop through all the children.
do
{
if (nav.Name == "ProductId")
{
if (nav.Value == this.DropDownList1.SelectedValue.Trim())
{
nav.MoveToParent();
if (nav.Name == "Product")
nav.DeleteSelf();
}
}
} while (nav.MoveToNext());
}
else
{
nav.MoveToParent();
if (nav.Name == "Product")
nav.DeleteSelf();
}
} while (nav.MoveToNext());
}
SetFileAttributes(rootFolder, (uint)0);//修改文件属性,去掉所有属性!
SetFileAttributes(rootFolder, (uint)128); // FILE_ATTRIBUTE_NORMAL
doc.Save(rootFolder);
}
}
当修改的是文件不在该站点下时 应该使用绝对路径..
原文:http://www.cnblogs.com/RevengeBoy/archive/2007/06/20/790235.aspx
asp.net 实现对xml文件的 读取,添加,删除,修改的更多相关文章
- linux下使用libxml2实现对xml文件的读取及查询
由于项目需要,这两天在用C++做XML文件解析的工作.在linux下有个很方便的操作xml文件的库——libxml2,它提供了一套创建和查询xml文件的C语言的接口.这篇博客主要介绍如何使用libxm ...
- 使用jq的ajax实现对xml文件的读取
之前一直在用json来传递数据,但是xml也是不可缺少的,于是开始了xml的征程.xml的一些属性啊之类的在菜鸟教程上列举的已经很详细了,但是却没有前段部分的获取教程,查询资料,遂懂: index.x ...
- 【JAVA使用XPath、DOM4J解析XML文件,实现对XML文件的CRUD操作】
一.简介 1.使用XPath可以快速精确定位指定的节点,以实现对XML文件的CRUD操作. 2.去网上下载一个“XPath帮助文档”,以便于查看语法等详细信息,最好是那种有很多实例的那种. 3.学习X ...
- JDOM方法实现对XML文件的解析
首先要下载JDOM.jar包,下载地址:http://download.csdn.net/detail/ww6055/8880371 下载到JDOM.jar包之后导入到工程中去. 实例程序: book ...
- 用DOM4J包实现对xml文件按属性分离。
转自本人博客:http://www.xgezhang.com/dom4j_xml_separata.html dom4j是一个Java的XML API.类似于jdom.用来读写XML文件的. dom4 ...
- Android平台中实现对XML的三种解析方式
本文介绍在Android平台中实现对XML的三种解析方式. XML在各种开发中都广泛应用,Android也不例外.作为承载数据的一个重要角色,如何读写XML成为Android开发中一项重要的技能. 在 ...
- Java代码加密与反编译(二):用加密算法DES修改classLoader实现对.class文件加密
Java代码加密与反编译(二):用加密算法DES修改classLoader实现对.class文件加密 二.利用加密算法DES实现java代码加密 传统的C/C++自动带有保护机制,但java不同,只要 ...
- spring 框架的xml文件如何读取properties文件数据
spring 框架的xml文件如何读取properties文件数据 第一步:在spring配置文件中 注意:value可以多配置几个properties文件 <bean id="pro ...
- C#的XML文件的读取与写入
在设计程序的时候,对于一些变化性较强的数据,可以保存在XML文件中,以方便用户修改.尤其是对于一些软硬件的配置文件,很多都选择了用XML文件来存取.XML文件简单易用,而且可以在任何应用程序中读写数据 ...
随机推荐
- codeforces C. Painting Fence
http://codeforces.com/contest/448/problem/C 题意:给你n宽度为1,高度为ai的木板,然后用刷子刷颜色,可以横着刷.刷着刷,问最少刷多少次可以全部刷上颜色. ...
- 大整数相乘的C实现
//之前有个测试这个题没做完,现在把它做完,通过这个程序可以对乘法了解更深刻.分析:运用整数乘法,当然进制越高越好,考虑到乘法不要越界,故考虑进制底数N应该满 //足,N^2<2^32次方.所以 ...
- Andoid 学习笔记 AppCompatEditText
android.support.v7.widget.AppCompatEditText 只有浮动标签 style中添加 <style name="txt_lab" paren ...
- Linux硬链接与软连接
1.Linux链接概念 Linux链接分两种,一种被称为硬链接(Hard Link),另一种被称为符号链接(Symbolic Link).默认情况下,ln命令产生硬链接. [硬连接]硬连接指通过索引节 ...
- nginx -- handler模块(100%)
handler模块简介 相信大家在看了前一章的模块概述以后,都对nginx的模块有了一个基本的认识.基本上作为第三方开发者最可能开发的就是三种类型的模块,即handler,filter和load-ba ...
- 博弈论(男人八题):POJ 1740 A New Stone Game
A New Stone Game Time Limit: 1000MS Memory Limit: 30000K Total Submissions: 5694 Accepted: 3119 ...
- C_FORCE_ROOT linux环境变量设置
nano /etc/profile gedit 也可以 结尾追加 export C_FORCE_ROOT="true"
- xrdp远程 & watchdog 启用与测试 & WebRTC
sudo apt-get install xrdp sudo apt-get install vnc4server tightvncserver echo "xfce4-session&qu ...
- 《A First Course in Probability》-chaper8-极限定理-弱大数定理
基于之前强大数定理的得证,这里我们再结合切比雪夫不等式,能够得到弱大数定理. 弱大数定理: 表面上,强大数定理和弱大数定理好像是质同的,但是他们之间真正的区别到底是什么呢?
- iOS10-配置获取隐私数据权限声明
iOS10中,苹果加强了对用户隐私数据的保护,在访问以下数据的时候都需要在info.list重配置privacy,进行声明,否则程序无法正常运行. Contacts, Calendar, Remind ...