1

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

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

// removed XML for privacy reasons

我正在尝试的查询示例:

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

我为字符串值使用了一个常量,并且我已经四次检查拼写是否匹配,并尝试了几个不同的元素,这些元素在文档中很明显,但它们都返回 null。我在这里做错了什么?

4

1 回答 1

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)

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

于 2012-09-11T20:03:30.423 回答