为什么必须在此LINQ to XML查询中提供命名空间?

时间:2014-04-09 18:28:18

标签: c# .net linq-to-xml

参考其他问题

Read an XML node value using Linq

指定命名空间时查询的作用是什么?如果我不提供,我发现我的查询不会产生任何结果。但是当我这样做的时候呢?它是怎么做到的?它的工作原理是什么?

            //name
            XNamespace ns = "urn:test-test:v10";
            var name = root.Descendants(ns + "name");

            foreach (var result in name)
            {

            }

3 个答案:

答案 0 :(得分:1)

这是因为XML namespace是元素全名的一部分。如果您指定了错误的名称,则无法找到该元素。

如果指定了错误的命名空间,则指定了错误的名称,因此您无法找到该元素。

答案 1 :(得分:1)

XML命名空间可帮助您避免XML元素中的名称冲突。

e.g。如果您的XML描述了2个不同的实体,例如 Fruit & 动物,两者都有名称属性。

当您呈现XML时,如果您的 Fruit 相关元素位于特定名称空间下,那就太棒了。 (由 xmlns:value 定义)

执行此操作后,您不能仅使用“名称”来识别名称元素。您需要封闭的命名空间。这就是 LINQ查询所做的**。它可以帮助您使用完整且正确的名称来唯一标识元素。

http://www.w3schools.com/xml/xml_namespaces.asp

答案 2 :(得分:1)

XML命名空间可以防止文档中出现重复元素,例如,如果您不拥有xml文档的全部内容。

XML Namespace tutorial