2012-11-28 26 views
2

我試圖在XML下面顯示的代碼示例中獲取x:String節點(L1.0.0.0)的值。示例中的XML由排隊構建時的TFS 2010生成。該XML有兩個主要節點和字典x:字符串和我已經嘗試過類似於其他堆棧溢出線程的查詢,我已經在其他研究下列入了該查詢。任何人有任何建議,爲什麼我的XQuery不工作?使用T-SQL和XQuery解析TFS 2010過程參數XML

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 Invalid Column

How to work with multiple namespaces

回答

4

在你的查詢,你需要用a因爲clr-namespace:System.Collections.Generic;assembly=mscorlib是默認的命名空間,並Dictionary屬於該前綴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