2

以下に示すコード サンプルの XML でx:String ノード(L1.0.0.0)の値を取得しようとしています。サンプルの XML は、ビルドをキューに入れるときに TFS 2010 によって生成されます。XML には、Dictionaryx:Stringの 2 つの主要なノードがあり、他のスタック オーバーフロー スレッドと同様のクエリを試し、追加の調査に含めました。私の 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

追加調査 スタック オーバーフロー T-SQL、XQuery 無効な列

複数の名前空間を操作する方法

4

1 に答える 1

4

クエリでは、 がデフォルトの名前空間であり、それに属しているため、接頭辞Dictionaryを付ける必要があります。aclr-namespace:System.Collections.Generic;assembly=mscorlibDictionary

;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 に答える