2012-09-11 42 views
1

這讓我有點瘋狂。我從數據庫列中拉取一個XML字符串,然後使用XDocument.Parse成功創建一個XDocument。我之前使用過linq來查詢xml樹,但由於某種原因,我所做的一切都是返回null。這與命名空間有關嗎?問題在LINQ to XML中選擇後裔

這裏是文本可視化工具對我的XDocument對象的採樣:

// removed XML for privacy reasons 

查詢我努力的一個例子:

XElement algorithmId = (from algoId in reportLogXml.Descendants(ALGORITHM_ID) 
          select algoId).FirstOrDefault(); 

我使用一個常量字符串值,並我有四重檢查,拼寫匹配以及嘗試清楚地在文檔中的幾個不同的元素,但他們都返回null。我在這裏做錯了什麼?

回答

2

是的,它可能與命名空間有關,但<AlgorithmId>元素沒有後代。

您可以修復的NS問題是這樣的:

//untested 
XNameSpace ns0 = "http://schemas.datacontract.org/2004/07/Adapters.Adapter"; 
var ns1 = reportLogXml.Root.GetDefaultNamespace();  

// check: ns0 and ns1 should be equal here 

... in reportLogXml.Descendants(ns1 + ALGORITHM_ID) 

注意,這是一個特殊的+運營商,按照格式完全相同。

+0

謝謝我只是通過選擇所有後代到一個列表,並意識到XML名稱空間正被添加到所有元素上。有沒有辦法將命名空間拉出XDocument?我寧願這樣做,而不是硬編碼它,以防萬一有變化。 –

+0

@JesseCarter - 是的,編輯。 –

+0

謝謝你太棒了! –