XQuery-以字符串形式获取节点,包括XML标记
我在SQLServer2008R2的表中有一个XML列。 XML类似于以下简化示例:XQuery-以字符串形式获取节点,包括XML标记,xml,sql-server-2008,xquery,Xml,Sql Server 2008,Xquery,我在SQLServer2008R2的表中有一个XML列。 XML类似于以下简化示例: <root> ... <Filters> <Filter type="a"> <Patterns> <Pattern>bla bla bla</Pattern> <Pattern>kuku</Pattern>
<root>
...
<Filters>
<Filter type="a">
<Patterns>
<Pattern>bla bla bla</Pattern>
<Pattern>kuku</Pattern>
</Patterns>
</Filter>
<Filter type="b">
<Name>Cookie</Name>
</Filter>
<Filter type="c">
<FileTypes>
<FileType>exe</FileType>
<FileType>jpg</FileType>
</FileTypes>
</Filter>
</Filters>
...
</root>
问题是$f/node[1]的字符串转换将节点所有内部元素中的文本连接起来,而不保留XML标记,因此我得到的结果如下:
Filter Type: a
Configuration:
bla bla blakuku
Filter Type: b
Configuration:
Cookie
Filter Type: c
Configuration:
exejpg
有没有可能通过这种方式实现我想要的呢?另一种方式可以得到你想要的结果 声明@T tablexmlfield xml 插入到@T值中 ' 呜呜呜呜 库库 曲奇 exe jpg ' 挑选材料 选择char10+char10+'过滤器类型:'+F.N.value'@Type',char1'+char10+ '配置:'+char10+space4, F.N.查询'*' 从T.xmlfield.nodes'/root/Filters/Filter'作为FN 对于xml路径 , 1, 2, 从@T作为T 结果: 过滤器类型:a 配置: 布拉布拉库 过滤器类型:b 配置: 曲奇 过滤器类型:c 配置:
谢谢你的回复。我选择不使用xmlField.nodes,而是使用xmlFields.query。。。因为我从表中的不同列(XML字段除外)中选择值,所以我希望FOR子句是表本身。
SELECT
xmlFiled.query(
let $nl := " "
let $space := " "
let $tab := concat($space, $space, $space, $space)
for $f in /root/.../Filters/Filter
return concat("Filter Type: ", $f/@type, $nl, "Configuration:", $nl, $tab, $f/node()[1], $nl)'
) AS Filters,
FROM Table
Filter Type: a
Configuration:
bla bla blakuku
Filter Type: b
Configuration:
Cookie
Filter Type: c
Configuration:
exejpg