• linkedu视频
  • 平面设计
  • 电脑入门
  • 操作系统
  • 办公应用
  • 电脑硬件
  • 动画设计
  • 3D设计
  • 网页设计
  • CAD设计
  • 影音处理
  • 数据库
  • 程序设计
  • 认证考试
  • 信息管理
  • 信息安全
菜单
linkedu.com
  • 网页制作
  • 数据库
  • 程序设计
  • 操作系统
  • CMS教程
  • 游戏攻略
  • 脚本语言
  • 平面设计
  • 软件教程
  • 网络安全
  • 电脑知识
  • 服务器
  • 视频教程
  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号
您的位置:首页 > 程序设计 >ASP.NET > 使用.NET存储XML数据的方法

使用.NET存储XML数据的方法

作者: 字体:[增加 减小] 来源:互联网 时间:2017-05-11

通过本文主要向大家介绍了.net解析xml,.net 读取xml文件,vb.net 读取xml,.net 读取xml,vb.net读取xml文件等相关知识,希望对您有所帮助,也希望大家支持linkedu.com www.linkedu.com
SQL Server 2000和XML for SQL Server 2000 Web版本(SQLXML)提供了三种存储XML数据的途径:XML Bulk Load和Updategrams,这两种客户端技术使用带有注解的大纲指定XML文档内容和数据库的表之间的映射;OpenXML是一种服务器端技术,它允许你在XML文档上定义关系视图,有了OpenXML的关系视图,你就能使用T-SQL代码查询XML文档中的数据并把结果存储在你的SQL Server数据库中。 
  这三种技术中的每一种都是为特定的目的设计的。XML Bulk Load把来自很大的XML文档的数据存储在SQL Server中;Updategrams执行SQL Server数据的优化更新(优化更新是没有锁(lock)的更新,在这种更新中系统检测是否有其它用户在原来读取数据后改变了它);OpenXML提供了人们熟悉的XML数据关系访问方法。 

  在这三种技术中,OpenXML是最灵活的,因为它提供了一个编程模型(T-SQL),在把XML数据存储在SQL Server数据库之前,你可以使用这种编程模型在XML数据上编写业务规则或执行计算逻辑。但是,由于OpenXML是一种基于服务器的技术,如果你频繁的使用它或者有大量的文档,它会降低SQL Server的性能。不过,如果你采用了微软.net框架组件,你就可以使用ADO.NET的数据集绕开这些性能和可伸缩性方面的限制,ADO.NET数据集赋予你一个强大的技术--为把XML数据存储在SQL Server包含了一个完整的编程模型。 

  数据集、数据表和XML映射 

  你可以使用数据集简单地从SQL Server中生成XML查询结果。通过提供一种可以在客户端和中间层计算机上使用的关系数据缓存(cache),数据集能够载入和维护多种数据源(包括SQL Server、其它的关系型数据库和XML)中的数据。 

  当你从XML文档中载入一个数据集的时候,该数据集必须把存储在层次XML表现(representation)中的数据映射成数据集的关系表现。例如,如果你的XML文档包含一个Order元素列表,而它又有一个作为子元素的嵌套的LineItem元素,那么通常这个文档被映射成关系表现中的Orders和LineItems数据表。这种映射的目的与OpenXML使用Xpath查询构造XML文档上的关系视图的方法的目的是一样的。但是与使用Xpath规范不同,数据集有自己的映射数据的方式。 

  数据集使用XML大纲定义(XSD)大纲把数据从XML文档映射到数据集的关系数据缓存中。数据集为你提供了指定映射XML数据的大纲的两种方法。首先,你可以引用一个定义了XML文档中使用的元素,属性和关系的XSD大纲。另一种方法是,你可以直接从文档的结构中推理大纲。换句话说,数据集可以通过检查XML文档的结构和内容建立大纲。 

  当你引用XSD大纲的时候,数据集使用这个大纲中定义的元素、属性与元素之间的关系来构造关系数据缓存中的数据表、数据列和数据关系,你可以使用这个数据缓存存储被映射的XML数据。我谈到关系数据缓存中的结构或大纲的时候,一般把它称为数据缓存的形式。当数据集处理大纲的时候,它会应用一组规则,这种规则与映射大纲中没有指定注解时Updategrams 和XML Bulk Load使用的默认映射规则相似,数据集使用这种规则建立数据集用于存储被映射的XML数据的表。数据集的映射规则概述如下: 

  · 复合元素--即包含其它元素或属性的元素--被映射成表。 

  · 属性和简单值(simple-valued)子元素--只包含数据,不包含其它元素或属性的元素--被映射成列。 

  · 数据类型从XSD类型映射为.NET类型。  

  推理(Inference)是一种快速、方便的把XML文档载入数据集的方法。表、列和关系都是"自我测量"(introspection)自动建立的,"自我测量"是数据集检查XML文档的结构和内容的过程。尽管使用推理明显减少了你的编程负担,但是它也给你的实现带来了不可预测性,因为对XML文档的很小的改动可能引起数据集建立不同形式的表。这些形式的改变可能引起你的应用程序意外中断。因此,我推荐你一般为应用程序引用一个大纲,建立原型的时候限制推理的使用。 

  现在让我们看一看如何使用大纲建立一个可用于更新SQL Server数据库的客户端数据集数据缓存的例子。

映射XML订单 

  假定你在编写一个接受用户订单的应用程序,订单是XML格式的,它的XSD大纲如图1定义。该大纲定义了三种复合类型,分别提供订单的客户数据、订单数据和线性数据项。一个顶层Customer元素定义了XML文档的根。这个封闭的系统定义了元素之间的关系:Order元素包含了一个LineItem元素,Customer元素包含一个Order元素。图2显示了符合图1定义的大纲的一个XML文档实例。 

  图1:XSD大纲 

<?xml version="1.0" encoding="utf-8"?> 
<xs:schema targetNamespace="urn:Sep2003Example" elementFormDefault="qualified" 
xmlns="urn:Sep2003Example" 
xmlns:xs="http://www.w3.org/2001/XMLSchema"> 
 <xs:complexType name="OrderType"> 
 <xs:sequence> 
  <xs:element name="OrderID" type="xs:integer" /> 
  <xs:element name="LineItem" type="LineItemType" /> 
 </xs:sequence> 
</xs:complexType> 
<xs:complexType name="LineItemType"> 
 <xs:sequence> 
  <xs:element name="ProductID" type="xs:int" /> 
  <xs:element name="Quantity" type="xs:int" /> 
  <xs:element name="UnitPrice" type="xs:decimal" /> 
 </xs:sequence> 
</xs:complexType> 
<xs:complexType name="CustomerType"> 
 <xs:sequence> 
  <xs:element name="CustomerID" type="xs:string" /> 
  <xs:element name="Order" type="OrderType" /> 
 </xs:sequence> 
</xs:complexType> 
<xs:element name="Customer" type="CustomerType"> 
</xs:element> 
</xs:schema> 

  图2:一个XML文档示例 

<?xml version="1.0" ?> 
 <Customer xmlns="urn:Sep2003Example"> 
  <CustomerID>ALFKI</CustomerID> 
  <PO>9572658</PO> 
  <Address> 
  <Street>One Main Street</Street> 
  <City>Anywhere</City> 
  <State>NJ</State> 
  <Zip>08080</Zip> </Address> 
  <Order> 
   <OrderID>10966</OrderID> 
   <LineItem> 
    <ProductID>37</ProductID> 
    <UnitPrice>26.50</UnitPrice> 
    <Quantity>8</Quantity> 
    <Description>Gravad lax</Description> 
   </LineItem> 
   <LineItem> 
    <ProductID>56</ProductID> 
    <UnitPrice>38.00</UnitPrice> 
    <Quantity>12</Quantity> 
    <Description>Gnocchi di nonna Alice</Description> 
   </LineItem> 
  </Order> 
 </Customer> 

  列表1中显示的C#代码使用ReadXmlSchema方法把图1中的大纲载入一个叫作orderDS的数据集中。ReadXmlSchema建立了三个数据表,它们分别与大纲中定义的Customer、Order和LineItem元素对应。因此你可以验证这个大纲在关系数据缓存中建立了预期的表,printDSShape方法把每个表的名称写到控制台上,后面跟着列的列表和每列的数据类型。 

  列表1: 建立关系数据缓存的C#代码 

using System; 
using System.Collections; 
using System.Data; 
using System.Data.SqlClient; 
using System.Xml; 

public class XMLMap 
{ 
public static void Main() 
{ 

// 建立数据集和读取大纲 
DataSet orderDS = new DataSet("CustOrder"); 
orderDS.ReadXmlSchema("CustOrderLitem.xsd"); 

// 打印数据集的形式 
printDSShape(orderDS); 

// 把一个XML格式的订单读入数据集 
orderDS.ReadXml("Order.xml",System.Data.XmlReadMode.IgnoreSchema); 

// 打印数据集中的数据 
printDSData(orderDS); 

// 此处插入业务规则和数据库更新逻辑 
} 

private static void printDSShape(DataSet ds) 
{ 
foreach (DataTable dt in ds.Tables) 
{ 
Console.WriteLine("{0}",dt.TableName); 

// 打印列的名称和类型 
foreach (DataColumn dc in dt.Columns) 
Console.WriteLine("\t{0}\t{1}",dc.ColumnName,dc.DataType.ToString()); 
}&
分享到:QQ空间新浪微博腾讯微博微信百度贴吧QQ好友复制网址打印

您可能想查找下面的文章:

  • .net读写xml文档详解
  • .net 操作xml的简单方法及说明
  • 使用.NET存储XML数据的方法

相关文章

  • 2017-05-11用Fine Uploader+ASP.NET MVC实现ajax文件上传[代码示例]
  • 2017-05-11详解可跨域的单点登录(SSO)实现方案【附.net代码】
  • 2017-05-11初识ASP.NET Mvc5+EF7的奇妙之旅
  • 2017-05-11轻量级asp.net ajax解决方案详解
  • 2017-05-11ASP.NET MVC使用EPPlus,导出数据到Excel中
  • 2017-05-11基于ERP程序的公共代码中出现的问题及过度封装不方便维护的解决办法
  • 2017-05-11asp.net 中静态方法和动态方法调用的区别实例分析
  • 2017-05-11ASP.NET网站第一次访问慢的解决方法
  • 2017-05-11由于扩展配置问题而无法提供您请求的页面错误解决方法
  • 2017-05-11ASP.NET SignaiR 实现消息的即时推送,并使用Push.js实现通知的示例代码

文章分类

  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号

最近更新的内容

    • asp.net 简易生成注册码(数字+大小写字母)
    • js获取Treeview选中的节点(C#选中CheckBox项)
    • 利用MS AJAX注册Javascript命名空间并创建类
    • ASP.NET实现word文档在线预览功能代码
    • asp.net下String.prototype.split()的兼容问题
    • 读取纯真IP数据库的公用组件接口QQWry.NET
    • VS2015开发环境的安装和配置
    • Asp.net第三方控件ComboBox组合框介绍
    • 详解GridView自带的编辑删除更新功能
    • asp.net 实现动态显示当前时间(不用javascript不考虑开销)

关于我们 - 联系我们 - 免责声明 - 网站地图

©2020-2025 All Rights Reserved. linkedu.com 版权所有