广告
返回顶部
首页 > 资讯 > 数据库 >如何使用sp_xml_preparedocument处理XML文档
  • 301
分享到

如何使用sp_xml_preparedocument处理XML文档

2024-04-02 19:04:59 301人浏览 泡泡鱼
摘要

如何使用sp_xml_preparedocument处理XML文档,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。有时会在存储过

如何使用sp_xml_preparedocument处理XML文档,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。

有时会在存储过程中处理一些XML格式的数据,所以会用到sp_xml_preparedocument,他可以将XML数据进行读取,然后使用 MSXML 分析器 (Msxmlsql.dll) 对其进行分析。我们就可以很容易的在存储过程中得到XML中我们想要的数据。下面的代码就是使用sp_xml_preparedocument读取XML:复制代码 代码如下: DECLARE @hdoc int DECLARE @doc varchar(1000) SET @doc =' <ROOT> <Customer CustomerID="VINET" ContactName="Paul Henriot"> <Order CustomerID="VINET" EmployeeID="5" OrderDate="1996-07-04T00:00:00"> <OrderDetail OrderID="10248" ProductID="11" Quantity="12"/> <OrderDetail OrderID="10248" ProductID="42" Quantity="10"/> </Order> </Customer> <Customer CustomerID="LILAS" ContactName="Carlos Gonzlez"> <Order CustomerID="LILAS" EmployeeID="3" OrderDate="1996-08-16T00:00:00"> <OrderDetail OrderID="10283" ProductID="72" Quantity="3"/> </Order> </Customer> </ROOT>' EXEC sp_xml_preparedocument @hdoc OUTPUT, @doc

上面只是读取了XML,要想获取XML数据还需要使用OPENXML,代码如下:复制代码 代码如下: SELECT * FROM openxml(@hdoc,'/ROOT/Customer',1) WITH (CustomerID VARCHAR(40),ContactName VARCHAR(40))

OPENXML有三个参数: 第一个是sp_xml_preparedocument读取是的OUTPUT参数,在本示例中就是@hdoc; 第二个是一个XPath表达式,用来获取指定位置的数据; 第三个是一个可选项,用来表示获取的方式,有0,1,2,8四种取值,详细解释请看 FROM后面的WITH也是可选的,用来指定获取哪些数据字段,上面代码中只取了CustomerID和ContactName。上面的查询结果如下: CustomerID ContactName —————————————- —————————————- VINET Paul Henriot LILAS Carlos Gonzlez 如果不指定WITH子句,查询出来的是一个默认的表结构,如下:

表格列的解释说明:

idbigint文档节点的唯一 ID。

根元素的 ID 值为 0。保留负 ID 值。

parentidbigint标识节点的父节点。此 ID 标识的父节点不一定是父元素。具体情况取决于此 ID 所标识节点的子节点的节点类型。例如,如果节点为文本节点,则其父节点可能是一个属性节点。

如果节点位于 XML 文档的顶层,则其 ParentID 为 NULL。

节点类型int标识节点类型,是对应于 XML 对象模型 (DOM) 节点类型编号的一个整数。

下列值是可以显示在此列中以指明节点类型的值:

1 = 元素节点

2 = 属性节点

3 = 文本节点

4 = CDATA 部分节点

5 = 实体引用节点

6 = 实体节点

7 = 处理指令节点

8 = 注释节点

9 = 文档节点

10 = 文档类型节点

11 = 文档片段节点

12 = 表示法节点

有关详细信息,请参阅 Microsoft XML (MSXML) SDK 中的“节点类型属性”主题。

localnamenvarchar(max)提供元素或属性的本地名称。如果 DOM 对象没有名称,则为 NULL。prefixnvarchar(max)节点名称的命名空间前缀。namespaceurinvarchar(max)节点的命名空间 URI。如果值是 NULL,则命名空间不存在。datatypenvarchar(max)元素或属性行的实际数据类型,否则是 NULL。数据类型是从内联 DTD 中或从内联架构中推断得出。prevbigint前一个同级元素的 XML ID。如果前面没有同级元素,则为 NULL。textntext包含文本形式的属性值或元素内容。如果边缘表项不需要值则为 NULL。

列名数据类型说明

在WITH子句中,我们还可以通过设置来获取父级元素的属性值:复制代码 代码如下: DECLARE @hdoc int DECLARE @doc varchar(1000) SET @doc =' <ROOT> <Customer CustomerID="VINET" ContactName="Paul Henriot"> <Order OrderID="10248" CustomerID="VINET" EmployeeID="5" OrderDate="1996-07-04T00:00:00"> <OrderDetail ProductID="11" Quantity="12"/> <OrderDetail ProductID="42" Quantity="10"/> </Order> </Customer> <Customer CustomerID="LILAS" ContactName="Carlos Gonzlez"> <Order OrderID="10283" CustomerID="LILAS" EmployeeID="3" OrderDate="1996-08-16T00:00:00"> <OrderDetail ProductID="72" Quantity="3"/> </Order> </Customer> </ROOT>' EXEC sp_xml_preparedocument @hdoc OUTPUT, @doc SELECT * FROM OPENXML (@hdoc, '/ROOT/Customer/Order/OrderDetail',2) WITH (OrderID int '../@OrderID', CustomerID varchar(10) '../@CustomerID', OrderDate datetime '../@OrderDate', ProdID int '@ProductID', Qty int '@Quantity')

查询的结果为: OrderID CustomerID OrderDate ProdID Qty ———– ———- ———————– ———– ———– 10248 VINET 1996-07-04 00:00:00.000 11 12 10248 VINET 1996-07-04 00:00:00.000 42 10 10283 LILAS 1996-08-16 00:00:00.000 72 3 有时候XML中的数据并不是以属性的方式存在,而是直接放在节点中,如下:复制代码 代码如下: DECLARE @doc varchar(1000) SET @doc =' <ROOT> <Customer CustomerID="VINET" ContactName="Paul Henriot"> <Order> <OrderID>10248</OrderID> <CustomerID>VINET</CustomerID> <EmployeeID>5</EmployeeID> <OrderDate>1996-07-04T00:00:00</OrderDate> </Order> </Customer> </ROOT>'

此时要获Order节点下的各项的值,可以用下面方法:复制代码 代码如下: DECLARE @hdoc int DECLARE @doc varchar(1000) SET @doc =' <ROOT> <Customer CustomerID="VINET" ContactName="Paul Henriot"> <Order> <OrderID>10248</OrderID> <CustomerID>VINET</CustomerID> <EmployeeID>5</EmployeeID> <OrderDate>1996-07-04T00:00:00</OrderDate> </Order> </Customer> </ROOT>' EXEC sp_xml_preparedocument @hdoc OUTPUT, @doc SELECT * FROM OPENXML (@hdoc, '/ROOT/Customer/Order',1) WITH (OrderID int 'OrderID', CustomerID varchar(10) 'CustomerID', EmployeeID int 'EmployeeID', OrderDate datetime 'OrderDate')

查询结果如下: OrderID CustomerID EmployeeID OrderDate ———– ———- ———– ———————– 10248 VINET 5 1996-07-04 00:00:00.000 可以看出是取属性值还是取节点的文本的值区别在于WITH子句的第三个参数是否有@符号

看完上述内容是否对您有帮助呢?如果还想对相关知识有进一步的了解或阅读更多相关文章,请关注编程网数据库频道,感谢您对编程网的支持。

您可能感兴趣的文档:

--结束END--

本文标题: 如何使用sp_xml_preparedocument处理XML文档

本文链接: https://www.lsjlt.com/news/58113.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • 如何使用sp_xml_preparedocument处理XML文档
    如何使用sp_xml_preparedocument处理XML文档,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。有时会在存储过...
    99+
    2022-10-18
  • PHP中如何使用DOMDocument来处理HTML、XML文档
    这篇文章主要介绍了PHP中如何使用DOMDocument来处理HTML、XML文档,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。php有什么特点1、执行速度快。2、具有很好的...
    99+
    2023-06-14
  • PHP中怎么使用DOMDocument来处理HTML、XML文档
    小编给大家分享一下PHP中怎么使用DOMDocument来处理HTML、XML文档,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧!PHP中使用DOMDocument来处理HTML、XML文档解析HTML// 解析&...
    99+
    2023-06-14
  • PHP中使用DOMDocument来处理HTML、XML文档的示例
    目录解析HTML生成一个XML总结其实从PHP5开始,PHP就为我们提供了一个强大的解析和生成XML相关操作的类,也就是我们今天要讲的 DOMDocument 类。不过我估计大部分人...
    99+
    2022-11-12
  • 用DEDE5.7单页文档如何生成XML
    用DEDE5.7单页文档如何生成XML?用DEDE5.7单页文档生成XML的方法新建一个你要生成的模板(后缀为htm)推荐学习:dedecms教程例: 制作一个单独页面,生成xml文件频道管理 -- > 单独页面管理 -- >...
    99+
    2017-05-01
    DEDE
  • Python中如何处理XML文件
    Python中如何处理XML文件,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。首先准备一个xml文件,xml中的内容如下所示。存储为:student.xml如果要获取这个xml...
    99+
    2023-06-16
  • 如何解析XML DOM文档对象模型用法
    这期内容当中小编将会给大家带来有关如何解析XML DOM文档对象模型用法,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。向大家简单介绍一下XML DOM,XML DOM是X...
    99+
    2022-10-19
  • python中使用docx模块处理word文档
    目录一.docx模块二.相关概念三.模块的安装和导入四.读取word文本一.docx模块 Python可以利用python-docx模块处理word文档,处理方式是面向对象的。也就是...
    99+
    2023-01-05
    python docx模块 python处理word文档 用Python操作Word文档
  • CHM如何实现文档解包批处理
    这篇文章主要介绍CHM如何实现文档解包批处理,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!HH的脾气是目标文件夹路径不支持带空格或引号,所以变复杂了点,否则一行命令足矣 其他的代码没啥难度,重在实用 批处理代码如下:...
    99+
    2023-06-08
  • Qt使用流处理XML文件的示例代码
    本章开始我们将了解到如何使用 Qt 处理 XML 格式的文档。 XML(eXtensible Markup Language)是一种通用的文本格式,被广泛运用于数据交换和数据存储(虽...
    99+
    2023-02-03
    Qt处理XML文件 Qt处理XML Qt XML
  • Python如何实现图像和办公文档处理
    这篇“Python如何实现图像和办公文档处理”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“Python如何实现图像和办公文档...
    99+
    2023-07-06
  • 如何正确使用PHP DOM-XML创建XML文件
    如何正确使用PHP DOM-XML创建XML文件,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。我们在创建XML文件并对其进行解析时,通常都会用到PHP DOM-XML。那么...
    99+
    2023-06-17
  • 如何使用Python读取xml文件
    目录 什么是xml?获得标签属性获得子标签获得标签属性值获得标签对之间的数据方法一方法二 什么是xml? xml即可扩展标记语言,它可以用来标记数据、定义数据类型,是一种允许用户对自...
    99+
    2023-05-15
    Python读取 Python读取xml Python读取文件
  • 如何使用eclipse生成java文档
    Project下的Generate Javadoc选项Javadoc command:设置javadoc生成程序,一般来说是JDK目录下bin目录的javadoc.exe。然后选择要生成文档的java项目,然后选择文档输出目录下一步这一步设...
    99+
    2018-07-02
    使用 eclipse java 文档
  • java 如何使用org.w3c.dom操作XML文件
    本篇介绍在java中,如何使用org.w3c.dom中的相关内容来操作XML文件。包括: 如何在内存中构建XML文件并写入磁盘; 如何从磁盘读取XML文件到内存; ...
    99+
    2022-11-12
  • 如何使用Python实现自动化文档整理工具
    这篇文章主要介绍“如何使用Python实现自动化文档整理工具”,在日常操作中,相信很多人在如何使用Python实现自动化文档整理工具问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”如何使用Python实现自动化...
    99+
    2023-07-06
  • 如何使用python处理文件
    今天就跟大家聊聊有关如何使用python处理文件,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。python可以做什么Python是一种编程语言,内置了许多有效的工具,Python几乎...
    99+
    2023-06-14
  • word文档的制表位如何使用
    在Word文档中使用制表位可以对文本进行对齐操作。制表位可以设置在横向的水平线上,用于对齐文本的起始位置,常见的制表位包括左对齐、右...
    99+
    2023-09-29
    word
  • 如何使用DOM文档对象模型
    这篇文章将为大家详细讲解有关如何使用DOM文档对象模型,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。DOM文档对象模型DOM就是文档对象模型(Documen...
    99+
    2022-10-19
  • 如何使用Runtime类和文档注释
    这篇文章主要讲解了“如何使用Runtime类和文档注释”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“如何使用Runtime类和文档注释”吧!一、Runtime类1.什么是Runtime类Ru...
    99+
    2023-06-15
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作