【问题标题】:TSQL - Parsing XML Help, searching for specific valueTSQL - 解析 XML 帮助,搜索特定值
【发布时间】:2012-07-17 21:34:50
【问题描述】:

谁能帮我用正确的 TSQL 来解析以下 xml。假设我想为 name 元素找到值为“y”的项目,但我想获取“value”元素的值,在下面的示例中为“2”。

Declare @XML xml

set @XML ='
<Test>
<items>
<item>
<name>x</name>
<value>1</value>
</item>
<item>
<name>y</name>
<value>2</value>
</item>
</items>
</Test>'

--i am stuck here
selecct @XML.value('Test/items/....")

通过搜索“y”,结果将是“2”。

这可能吗?

有人可以帮忙语法吗?谢谢!

【问题讨论】:

    标签: sql xml tsql xml-parsing


    【解决方案1】:

    试试这个

     select @xml.value('((test/items/item)[2]/value)[1]', 'nvarchar(max)')
    

    细分:

    (test/items/item)[2]  -- find the second instance of an item tag under a test tag
    
    ((test/items/item)[2]/value)[1] -- then find the first instance of a value tag under that
    

    值函数不能给出任何表达式,即使在理论上可以返回多个值。如果有疑问,请像 (some-expression-here)[1] 那样将括号括起来。

    查找与给定名称对应的值:

     select @xml.value('((test/items/item)[name="y"][1]/value)[1]', 'nvarchar(max)')
    

    【讨论】:

    • 嗨,本,非常感谢您的回复。如果我知道我要查找的内容在标签的第二个实例中,这将起作用。但如果我没有呢?所以我想在名称标签中搜索值“y”并返回值标签的值。可能应该更好地命名标签..对不起。
    • 嗨,Ben,你的编辑看起来像我要找的,但是当我运行它时,我得到一个空返回 Declare @XML xml set @XML =' &lt;test&gt; &lt;items&gt; &lt;item&gt; &lt;name&gt;x&lt;/name&gt; &lt;value&gt;1&lt;/value&gt; &lt;/item&gt; &lt;item&gt; &lt;name&gt;y&lt;/name&gt; &lt;value&gt;2&lt;/value&gt; &lt;/item&gt; &lt;/items&gt; &lt;/test&gt;' select @xml.value('((test/items)[name="y"][1]/value)[1]', 'nvarchar(max)')
    【解决方案2】:

    您可能需要为此使用 XQuery(设计用于查询 XML 数据)。 TSQL 支持它的一个子集:

    http://msdn.microsoft.com/en-us/library/ms189075%28SQL.90%29.aspx

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-06-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多