【问题标题】:How to read xml in t-sql?如何在 t-sql 中读取 xml?
【发布时间】:2012-01-25 08:41:48
【问题描述】:

谁能告诉我如何从以下 xml 中选择值: 我想得到如下行: Col1:键,Col2:键,Col3:值

1 1 value
1 2 value2
1 3 value3

2 4 value4
2 5 value5
2 6 value6

这里是xml:

<root>
  <item>
    <key>1</key>
    <value>
      <params>
        <item>
          <key>1</key>
          <value>value</value>      
        </item>
        <item>
          <key>2</key>
          <value>value2</value>     
        </item>     
        <item>
          <key>3</key>
          <value>value3</value>     
        </item>     
      </params>
    </value>
  </item>
  <item>
    <key>2</key>
    <value>
      <params>
        <item>
          <key>4</key>
          <value>value4</value>     
        </item>
        <item>
          <key>5</key>
          <value>value5</value>     
        </item>     
        <item>
          <key>6</key>
          <value>value6</value>     
        </item>     
      </params>
    </value>
  </item>  
</root>

【问题讨论】:

    标签: sql-server-2008 tsql


    【解决方案1】:

    假设你在 T-SQL 变量中有这个 XML - 那么你可以使用这个 sn-p 代码:

    DECLARE @input XML = '...(your XML here).....'
    
    SELECT
        Key1 = Item.value('(key)[1]', 'int'),
        Key2 = Item2.value('(key)[1]', 'int'),
        ItemValue = Item2.value('(value)[1]', 'varchar(50)')
    FROM 
        @input.nodes('/root/item') AS T(Item)
    CROSS APPLY
        item.nodes('value/params/item') AS T2(Item2)
    

    这给了我一个输出:

    Key1  Key2  ItemValue
     1     1     value
     1     2     value2
     1     3     value3
     2     4     value4
     2     5     value5
     2     6     value6  
    

    方法如下:

    • 使用第一个.nodes() XQuery 方法获取&lt;root&gt; 下的&lt;item&gt; 节点列表作为您的第一个“XML 节点列表”,并提取该XML 中&lt;key&gt; XML 元素的值分割成Key1

    • 使用value/params/item XPath 获取该XML 片段内的“嵌套” XML 节点列表,以获取子行 - 并从嵌套的子 XML 中提取 &lt;key&gt;&lt;value&gt; 中的值分成Key2ItemValue

    【讨论】:

    • 酷 这就是我一直在寻找的。我认为不知何故我将不得不从特定的叶子中枚举两次,但不知道我可以使用第一个节点中的“项目”。再次感谢!
    猜你喜欢
    • 1970-01-01
    • 2013-07-29
    • 2015-02-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多