设为首页 收藏本站
查看: 601|回复: 0

[经验分享] XML与SQL SERVER2005 (三)

[复制链接]

尚未签到

发表于 2016-11-11 07:16:01 | 显示全部楼层 |阅读模式

XMLSQL SERVER2005 ()


------------------------------------------------------------------------
-- Author : HappyFlyStone
-- Date : 2009-08-05
-- Version: Microsoft SQL Server 2005 - 9.00.2047.00 (Intel X86)
-- Apr 14 2006 01:12:25
-- Copyright (c) 1988-2005 Microsoft Corporation
-- Enterprise Edition on Windows NT 5.2 (Build 3790: Service Pack 2)
--
-- 本文探讨 SQL Server 2005 中内置的 XML 支持.
-- 第三篇旨在对路径表达式中的全文与缩写讲法及绝对与相对路径详细说明。
-- 本文来自happyflystone -CSDN博客,
-- 转载请标明出处:http://blog.csdn.net/happyflystone
------------------------------------------------------------------------





上节说Xpath时,小梁大侠看过说不够具体,所以今天呢再深入点并使用点例子来说明问题。把xquery放到后面进行介绍。

路径表达式分为绝对与相对路径两种。在说具体的路径表达前得先说一下路径表达式有全文拼写语法和缩写语法。比如如下表达式:

/child::exam/child::name

其实可以写为: /exam/name 因为child本身就是默认轴,所以可以省略。再比如如下表达式:

/child::exam/child::city[attribute::state=”NC”]

attribute轴可以用@代替,那这样可以得缩写:/exam/city[@state=”NC”]

好,我们现在打开SQL SERVER 2005,新建一个查询测试如下代码来更好解释一下缩写的规律:

declare @xml xml

set @xml = '<address>

<exam>

<name> flystone1 </name>

<street> 1401 Main Street </street>

<city state="NC">Anytown</city>

<postal-code> 210000 </postal-code>

</exam>

<exam>

<name> flystone2 </name>

<street> 1402 Main Street </street>

<city state="NM">Anytown</city>

<postal-code> 210000 </postal-code>

</exam>

</address>

'

select @xml.query('/descendant-or-self::node()/exam/name')

select @xml.query('/descendant-or-self::node()/child::exam/child::name')

select @xml.query('//child::exam/name')

select @xml.query('//child::exam/child::name')

select @xml.query('//exam/name')

select @xml.query('/address/exam/name')

select @xml.query('//exam/name')

/*

-----------------------------------------------------

<name> flystone1 </name><name> flystone2 </name>


(1 行受影响)

*/



select @xml.query('//exam/city[attribute::state="NC"]')

select @xml.query('//exam/city[@state="NC"]')

/*

---------------------------------

<city state="NC">Anytown</city>


(1 行受影响)

*/
select @xml.query('//exam/name/.')

select @xml.query('/address/exam/name/self::node()')

/*

--------------------------------------------------------

<name> flystone1 </name><name> flystone2 </name>


(1 行受影响)

*/

select @xml.query('//exam/name/..')

select @xml.query('/address/exam/name/parent::node()')


/*

-----------------------------------------

<exam><name> f ...... Anytown</city><postal-code>


(1 行受影响)

*/

以上所有select查询我们可以发现好多有同一个结果 ,那么我们可以看出来如下规律:

1、child 缺少轴可以省略,如:

select @xml.query('//child::exam/name')

select @xml.query('//child::exam/child::name')

select @xml.query('//exam/name')

2、/descendant-or-self::node()/ 代表上下节点和后代,可以用// ,如:
select @xml.query('/descendant-or-self::node()/exam/name')
select @xml.query('//exam/name')
3、attribute轴可以缩写 @,如:
select @xml.query('//exam/city[attribute::state="NC"]')

select @xml.query('//exam/city[@state="NC"]')
4、self::node()节点本身可以缩写为”.” 。
select @xml.query('//exam/name/.')

select @xml.query('/address/exam/name/self::node()')
5、parent::node 父节点可以省略为”..”
select @xml.query('//exam/name/..')

select @xml.query('/address/exam/name/parent::node()')

好,以上我们对全文拼写的语法与缩写语法的一些探讨。下面说绝对与相对,其实绝对路径是以 //或/ 开头的的路径表达式,绝对路径开头的// 或 / 后接着的就是相对路,但是以/开始的绝对路径后可以不跟任何相对路径,这一点得注意。

declare @xml xml

set @xml = '<address>

<exam>

<name> flystone1 </name>

<street> 1401 Main Street </street>

<city state="NC">Anytown</city>

<postal-code> 210000 </postal-code>

</exam>

<exam>

<name> flystone2 </name>

<street> 1402 Main Street </street>

<city state="NM">Anytown</city>

<postal-code> 210000 </postal-code>

</exam>

</address>

'


select @xml.query('./address/exam/name')

select @xml.query('/address/exam/name/.')

select @xml.query('/address/exam/name')

select @xml.query('//exam/name/.')

select @xml.query('/.')

select @xml.query('/')

select @xml.query('.')

select @xml.query('address/exam/name')

select @xml.query('//../././.')

select @xml.query('//./././.')


哈哈,理解了上面这些路径也就对绝对与相对有基本了解。好了,今天就说到这儿,明天继续轴、节点测试及路径表达如何使用轴.

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-298593-1-1.html 上篇帖子: sql 字符串函数 下篇帖子: T-Sql函数简单总结
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表