关于openxml的问题

isLovePython 2006-02-17 04:36:47
在sql server2000帮助文档里看到如下关于openxml的说明,有几两点不明:
1、何为以特性为中心的映射
2、何为以元素为中心的映射
假设有如下xml文档:
<?xml version="1.0" encoding="UTF-8"?>
<Root>
<test A="test">
<subtest B="test"/>
</test>
</Root>
请高手指教...谢谢

字节值
描述
0 默认为以特性为中心的映射。
1 使用以特性为中心的映射。
在某些情况下,可以将它与 XML_ELEMENTS 组合使用。使用时首先应用以特性为中心的映射,然后对于所有仍未处理的列应用以元素为中心的映射。
2 使用以元素为中心的映射。
在某些情况下,可以将它与 XML_ATTRIBUTES 组合使用。使用时先应用以特性为中心的映射,然后对于所有仍未处理的列应用以元素为中心的映射。
8 可与 XML_ATTRIBUTES 或 XML_ELEMENTS 组合使用(逻辑 OR)。
在检索的上下文中,该标志指明不应将已消耗的数据复制到溢出属性 @mp:xmltext
...全文
101 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
isLovePython 2006-02-21
  • 打赏
  • 举报
回复
自己顶
lzhs 2006-02-21
  • 打赏
  • 举报
回复
搞错,应该是:
SELECT *
FROM OPENXML (@idoc, '/ROOT/test',2) --不是1
WITH (subtest varchar(10) )

这样才是取得子元素,如果是如下的语句:
SELECT *
FROM OPENXML (@idoc, '/ROOT/test',1)
WITH (A varchar(10) )
则会返回/ROOT/test节点的属性A的值,此例中为“test”~
lzhs 2006-02-21
  • 打赏
  • 举报
回复
<Root>
<test A="test">
<subtest B="test"/>
</test>
</Root>

首先了解一下这个XML。
其中根元素为Root,test是Root的子元素,subTest是test的子元素。
test有一个属性,名称为A,值为“test”,subtest有一个属性,名称为B,值为“test”。

在OpenXML中,所谓的以特性为中心的映射,就是取得给定的节点的 属性 的值;所谓的以元素为中心的映射,就是取得给定的节点的 子元素 的值。

而取得哪一个属性的值或是子元素的值,就是由With子句指定的。
如:
SELECT *
FROM OPENXML (@idoc, '/ROOT/test',1)
WITH (subtest varchar(10) )

此语句会去读取/ROOT/test目录下的子元素subtest的值,如果有,则返回此值,没有此子元素则返回NULL。(此例中返回的是0长度字符 '')


至于具体的属性的值与子元素的值,在XML中是怎么样一个表示方法,还要参考XML。这里我就不说了(否则就要把书上的东西搬过来了,呵呵)

34,873

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧