asp.net操作xml(增删查改)
asp.net操作xml
1.xml文档Products.xml
<?xml version="1.0" encoding="utf-8"?>
<products xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://www.pro.org/2001/products" xsi:schemaLocation="http://www.pro.org/2001/products products.xsd">
<item belong="数码">
<id>1</id>
<name>手机</name>
<price>1000</price>
</item>
<item belong="服装">
<id>2</id>
<name>男装</name>
<price>200</price>
</item>
<item belong="食品">
<id>3</id>
<name>黄瓜</name>
<price>4</price>
</item>
</products>
2.schema约束文档 products.xml
<?xml version="1.0" encoding="utf-8"?>
<schema xmlns="http://www.w3.org/2001/XMLSchema" targetNamespace="http://www.pro.org/2001/products" xmlns:pro="http://www.pro.org/2001/products" elementFormDefault="qualified">
<element name="products" type="pro:pro"></element>
<complexType name="pro">
<sequence>
<element name="item" maxOccurs="unbounded">
<complexType>
<sequence>
<element name="id" type="string"></element>
<element name="name" type="string"></element>
<element name="price">
<simpleType>
<restriction base="float">
<maxExclusive value="10000"></maxExclusive>
<minInclusive value="0"></minInclusive>
</restriction>
</simpleType>
</element>
</sequence>
<attribute name="belong" type="string"></attribute>
</complexType>
</element>
</sequence>
</complexType>
</schema>
3.定义实体类 DBPro.cs
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web; /// <summary>
///DBPro 的摘要说明
/// </summary>
public class DBPro
{
string belong;
string id;
string name;
string price;
public DBPro(string belong,string id,string name,string price)
{
this.belong = belong;
this.id = id;
this.name = name;
this.price = price;
}
public string Belong
{
get { return belong; }
set { belong = value; }
}
public string ID
{
get { return id; }
set { id = value; }
}
public string Name
{
get { return name; }
set{name=value;}
}
public string Price
{
get { return price; }
set { price = value; }
}
}
4.新建一个web窗体Defaut.aspx,在Default.aspx.cs中编写核心代码
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Xml; public partial class _Default : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{ //选择方法进行测试
//SearchXml();
DBPro pro = new DBPro("家电","10", "电视", "3999");
AddToXml(pro);
//UpdateOneXml(pro);
//DeleteXml("10");
}
/// <summary>
/// 遍历xml文档
/// </summary>
/// <param name="pro"></param>
private void SearchXml()
{
//提取xml文档
XmlDocument xd = new XmlDocument();
xd.Load(System.Web.HttpContext.Current.Server.MapPath("Products.xml"));
//获取根节点
XmlNode root = xd.DocumentElement;
//获取节点列表
XmlNodeList items = root.ChildNodes;
//遍历item项
Response.Write("<pre>");
foreach (XmlNode item in items)
{
//输出属性
Response.Write(item.Attributes["belong"].Name + "=" + item.Attributes["belong"].InnerText);
//遍历输出子节点
foreach (XmlNode p in item)
{
Response.Write(p.Name + "=" + p.InnerText);
}
}
Response.Write("</pre>");
}
/// <summary>
/// xml添加
/// </summary>
/// <param name="pro"></param>
private void AddToXml(DBPro pro)
{
//提取xml文档
XmlDocument xd = new XmlDocument();
xd.Load(System.Web.HttpContext.Current.Server.MapPath("Products.xml"));
//获取根节点
XmlNode root = xd.DocumentElement;
//创建元素
XmlElement newItem = xd.CreateElement("item");
XmlElement newID = xd.CreateElement("id");
XmlElement newName = xd.CreateElement("name");
XmlElement newPrice = xd.CreateElement("price");
//配置参数
newItem.SetAttribute("belong", pro.Belong);
newID.InnerText = pro.ID;
newName.InnerText = pro.Name;
newPrice.InnerText = pro.Price;
//装配
root.AppendChild(newItem);
newItem.AppendChild(newID);
newItem.AppendChild(newName);
newItem.AppendChild(newPrice);
xd.Save(System.Web.HttpContext.Current.Server.MapPath("Products.xml"));
}
/// <summary>
/// 修改xml一项
/// </summary>
/// <param name="pro"></param>
private void UpdateOneXml(DBPro pro)
{
//提取xml文档
XmlDocument xd = new XmlDocument();
xd.Load(System.Web.HttpContext.Current.Server.MapPath("Products.xml"));
//获取根节点
XmlNode root = xd.DocumentElement;
//获取节点列表
XmlNodeList items = root.ChildNodes;
//遍历节点列表
foreach (XmlNode item in items)
{
//遍历item
foreach (XmlNode p in item)
{
if (p.Name == "id" && p.InnerText == pro.ID)
{
item.Attributes["belong"].InnerText = pro.Belong;
p.NextSibling.InnerText = pro.Name;
p.NextSibling.NextSibling.InnerText = pro.Price;
}
}
}
}
/// <summary>
/// 删除xml一项
/// </summary>
/// <param name="pro"></param>
private void DeleteXml(string id)
{
//提取xml文档
XmlDocument xd = new XmlDocument();
xd.Load(System.Web.HttpContext.Current.Server.MapPath("Products.xml"));
//获取根节点
XmlNode root = xd.DocumentElement;
//获取节点列表
XmlNodeList items = root.ChildNodes;
//遍历节点列表
foreach (XmlNode item in items)
{
//遍历item
foreach (XmlNode p in item)
{
if (p.Name == "id" && p.InnerText == id)
{
root.RemoveChild(item);
}
}
}
}
}
此处应注意:用XMLDocument添加元素,遇到了这样一个问题:
当根节点具有 xmlns 属性时,用 XMLDocument 创建子元素时如果不指定 xmlns 或指定 xmlns 为 null 时,子元素将自动具有 xmlns="" 属性
<item belong="家电" xmlns="">
<id>10</id>
<name>电视</name>
<price>3999</price>
</item>
问题原因:
当父节点具有 xmlns 属性时,子节点必须指定 xmlns 属性,仅当子节点的 xmnls 属性与父节点相同时,子节点才不显示 xmlns 属性,最终就不会在 .xml 文件中显示出来
解决办法:
XmlElement newItem = xd.CreateElement("item",xd.DocumentElement.NamespaceURI);
XmlElement newID = xd.CreateElement("id",xd.DocumentElement.NamespaceURI);
XmlElement newName = xd.CreateElement("name",xd.DocumentElement.NamespaceURI);
XmlElement newNumber = xd.CreateElement("number",xd.DocumentElement.NamespaceURI);
在每一个下级节点,都要继续指定命名空间,否则仍会出现 xmlns="" 属性。
///新手上道,若有不足或错误之处,敬请各位大神批评指正!
asp.net操作xml(增删查改)的更多相关文章
- linq to xml 增删查改
一.XML基本概述 XML文件是一种常用的文件格式,例如WinForm里面的app.config以及Web程序中的web.config文件,还有许多重要的场所都有它的身影.Xml是Internet环境 ...
- springboot使用RestHighLevelClient7简单操作ElasticSearch7增删查改/索引创建
本次操作是在 Windows上安装ElasticSearch7 进行操作 导入依赖 <?xml version="1.0" encoding="UTF-8&qu ...
- XML 增删查改
<?xml version="1.0" encoding="utf-8"?> <users> <person name=" ...
- C# xml增删查改
C# XML XmlDocument 添加命名空间: using System.Xml; 定义公共对象: XmlDocument xmldoc ; XmlNode xmlnode ; XmlEleme ...
- python操作mysql增删查改
# coding=utf-8 ''' python操作mysql,需安装MySQLdb驱动 安装MySQLdb,请访问 http://sourceforge.net/projects/mysql-py ...
- c#中xml增删查改
/// <summary> /// xml转list /// </summary> /// <typeparam name="T">目标对象&l ...
- Mysql 单表操作、增删查改(基础4)
新建一个表,往里面插入数据. #新建一个表 mysql> create table test( -> id int, -> name varchar(20) -> );Quer ...
- ASP.NET动态的网页增删查改
动态页面的增删查改,不多说了,直接上代码 跟前面的一般处理程序一样我上用的同一套三层,只是UI层的东西不一样,在纠结着要不要重新在上一次以前上过的代码: 纠结来纠结去,最后我觉得还上上吧,毕竟不上为我 ...
- Mybatis基础配置及增删查改操作
一.简介 平时我们都用JDBC访问数据库,除了需要自己写SQL之外,还必须操作Connection, Statement, ResultSet 这些其实只是手段的辅助类. 不仅如此,访问不同的表,还会 ...
随机推荐
- R语言编程艺术# 矩阵(matrix)和数组(array)
矩阵(matrix)是一种特殊的向量,包含两个附加的属性:行数和列数.所以矩阵也是和向量一样,有模式(数据类型)的概念.(但反过来,向量却不能看作是只有一列或一行的矩阵. 数组(array)是R里更一 ...
- JAVA设置环境变量和在DOS下运行java程序
在学校实训的这几天,老师带着我们开始深入的复习java.这是第一天的内容哦 对于“JAVA设置环境变量和在DOS下运行java程序”,许多初学者是陌生的,但了解这个却对后期的学习很重要. http:/ ...
- django: urlconfig
django 的 url 配置主要在 urls.py 中进行 urlconfig 中对 url 的处理方式主要在: 一 视图处理方式 如 上文 例子所示: url(r'^blog/index/$', ...
- Sass的控制命令(循环)
@if@if指令是一个SassScript,它可以根据条件来处理样式块,如果条件为true返回一个样式块,反之false返回另一个样式块.在Sass中除了@if,还可以配合@else if和@else ...
- HTML5 Canvas前台压缩图片并上传到服务器
1.前台代码: <input id="fileOne" type="file" /> <input id="btnOne" ...
- Html.Action和Html.RederAction来创建子视图
1. 父视图和子视图 父视图是包含了调用返回子视图的动作方法的视图. 父视图包含大部分用于呈现页面的HTML.子视图仅包含用于展示视图某部分的必须的标记. 例如,一个子视图创建一个列表,视图可能仅仅包 ...
- 转载:JAVA中使用JSON进行数据传递
转载网址:http://www.cnblogs.com/undead/archive/2012/07/18/2594900.html 最近在做一个基于JAVA Servlet的WEB应用以及对应的An ...
- IE,火狐,谷歌浏览器下js判断滚动条是否已拉到页面最底部
E/FF/Chrome下document.documentElement和document.body的 scrollHeight/scrollTop/clientHeight 以及判断滚动条是否已拉到 ...
- scala 入门(2)--数组相关操作
scala 无论从数组的定义还是操作方面来说都跟java非常相似,但又有其独特的强大之处… 1. 定长数组 对于长度不变的数组,可以用scala中的Array. //scala 里使用new实例化对象 ...
- 这样就算会了PHP么?-5
汇集一点关于数据深入一些的几个函数,去重,弹出,加入,查找.... <?php $str = "时装,休闲,职业装"; $strs = explode(",&quo ...