【问题标题】:issue selecting descendants in LINQ to XML在 LINQ to XML 中选择后代的问题
【发布时间】:2012-09-11 19:55:24
【问题描述】:

这让我有点发疯。我正在从数据库列中提取一个 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。我在这里做错了什么?

【问题讨论】:

    标签: c# xml linq


    【解决方案1】:

    是的,它可能与命名空间有关,而且<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)
    

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

    【讨论】:

    • 谢谢 我刚刚通过选择列表中的所有后代并意识到 XML 命名空间被添加到所有元素中。有没有办法将命名空间从 XDocument 中拉出来?我宁愿这样做,也不愿硬编码以防万一发生任何变化。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多