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 这些其实只是手段的辅助类. 不仅如此,访问不同的表,还会 ...
随机推荐
- OD: Windows Security Techniques & GS Bypassing via C++ Virtual Function
Windows 安全机制 漏洞的万源之本在于冯诺依曼设计的计算机模型没有将代码和数据进行区分——病毒.加壳脱壳.shellcode.跨站脚本攻击.SQL注入等都是因为计算机把数据和代码混淆这一天然缺陷 ...
- (转)ASP.NET版本的Kindeditor插件的使用(同步)
昨天老大让我自己下载一个kindeditor说要放到“描述”功能中,并且不能提交(一边在textarea中写一边在label控件中将数据显示出来),由于从来没弄过,实在费了一翻劲.所以将此记录下来,一 ...
- 难搞的Android开发环境(sdk 代理)
概述 搞了近一周的环境搭建,在csdn上提个问,有位网友说弄一下代理,搜一下,果真有人写博客:Android SDK代理服务器解决国内不能更新下载问题 其实我下了很多个集成好的 adt-bundle- ...
- foreach遍历扩展(二)
一.前言 假设存在一个数组,其遍历模式是根据索引进行遍历的:又假设存在一个HashTable,其遍历模式是根据键值进行遍历的:无论哪种集合,如果它们的遍历没有一个共同的接口,那么在客户端进行调用的时候 ...
- Mysql启动失败 MYSQL:The server quit without updating PID file
MySQL5.6启动时出错 提示MYSQL:The server quit without updating PID file 首先执行 /bin/mysqld_safe --user=mysql & ...
- JavaScript进阶学习的一些建议
blankyao最近问我如何学习JavaScript,他觉着在理解了JavaScript的语法之后,不知如何去学习JavaScript了. 其实我也是个JavaScript小菜,最近在开发中遇到不少关 ...
- C程序设计语言练习题1-8
练习1-8 编写一个统计空格.制表符与换行符个数的程序. 代码如下: #include <stdio.h> // 包含标准库的信息. int main() // 定义名为main的函数,它 ...
- C++ 继承和包含的区别?
在<代码大全>这本书的第六章中提到了有关包含与继承的一些原则,我摘取如下: 一.包含("has a") 包含表示一个类含有一个基本数据元素或对象.包含是面向对象编程的主 ...
- .NET知识点总结一(笔记整合)
1. .net framework原理简介,C#程序的两次编译 .NET源代码——>语言编译器(第一次编译)——>MSIL+元数据(exe文件)——>CLR(公共语言运行时——类 ...
- 一个oracle存储过程
打开plsql,在packages文件夹里新建存储过程 在sql窗口中运行如下语句 create or replace package SY_USER_PKG1 is TYPE MYCURSOR IS ...