Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/sql-server-2008/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
XQuery-以字符串形式获取节点,包括XML标记_Xml_Sql Server 2008_Xquery - Fatal编程技术网

XQuery-以字符串形式获取节点,包括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>

我在SQLServer2008R2的表中有一个XML列。 XML类似于以下简化示例:

<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 := "&#10;"
     let $space := "&#32;"
     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