问题在LINQ to XML中选择后代

时间:2012-09-11 19:55:25

标签: c# xml linq

这让我有点疯狂。我从数据库列中提取XML字符串,并使用XDocument.Parse成功创建XDocument。我之前使用linq来查询xml树,但由于某种原因,我正在做的一切都是返回null。它与命名空间有关吗?

以下是我的XDocument对象的文本可视化器的示例:

// removed XML for privacy reasons

我正在尝试的查询示例:

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

我使用一个常量作为字符串值,我有四倍检查拼写匹配以及尝试几个明显在文档中的不同元素,但它们都返回null。我在这里做错了什么?

1 个答案:

答案 0 :(得分: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)

请注意,这是一个特殊的+运算符,请严格遵循格式。