2

我正在尝试在下面显示的代码示例中获取 XML 中x:String 节点(L1.0.0.0)的值。示例中的 XML 在我们对构建进行排队时由 TFS 2010 生成。XML 有两个主要节点和Dictionaryx:String,我已经尝试过类似于另一个堆栈溢出线程的查询,并且我已经将其包括在额外的研究中。有人对我的 XQuery 不工作有什么建议吗?

DECLARE @XML XML;
SET @XML = '<Dictionary x:TypeArguments="x:String, x:Object" 
xmlns="clr-namespace:System.Collections.Generic;assembly=mscorlib" 
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">   
<x:String x:Key="GetVersion">L1.0.0.0</x:String> 
</Dictionary>'


;WITH XMLNAMESPACES(
'clr-namespace:System.Collections.Generic;assembly=mscorlib' AS a,
'http://schemas.microsoft.com/winfx/2006/xaml' AS x)

SELECT @XML.value('(/Dictionary/x:String)[1]', varchar(100)) AS BuildLabel

附加研究 Stack Overflow T-SQL, XQuery Invalid Column

如何使用多个命名空间

4

1 回答 1

4

Dictionary在您的查询中,您需要添加前缀asinceclr-namespace:System.Collections.Generic;assembly=mscorlib是默认命名空间并且Dictionary属于该命名空间。

;WITH XMLNAMESPACES(
'clr-namespace:System.Collections.Generic;assembly=mscorlib' AS a,
'http://schemas.microsoft.com/winfx/2006/xaml' AS x)
SELECT @XML.value('(/a:Dictionary/x:String)[1]', 'varchar(100)') AS BuildLabel

或者您可以在查询中将命名空间指定为默认值。

;WITH XMLNAMESPACES('http://schemas.microsoft.com/winfx/2006/xaml' as x,
                     DEFAULT 'clr-namespace:System.Collections.Generic;assembly=mscorlib')
SELECT @XML.value('(/Dictionary/x:String)[1]', 'varchar(100)') AS BuildLabel
于 2012-11-29T07:34:53.573 回答