C# 关于LINQ到XML的一个简单问题

C# 关于LINQ到XML的一个简单问题,c#,.net,linq-to-xml,namespaces,C#,.net,Linq To Xml,Namespaces,这将不起作用,因为查询中缺少根元素。这将有助于: var query = from item in XDocument.Parse(xml).Elements(ns + "table") select item; 现在,如果问题是希望查找所有表元素,而不考虑名称空间,则需要以下内容: XNamespace ns = "http://www.w3schools.com/furniture"; var query = XDocument.Parse(xml).Element

这将不起作用,因为查询中缺少根元素。这将有助于:

var query = from item in XDocument.Parse(xml).Elements(ns + "table")
            select item;
现在,如果问题是希望查找所有表元素,而不考虑名称空间,则需要以下内容:

XNamespace ns = "http://www.w3schools.com/furniture";
var query = XDocument.Parse(xml).Element("root").Elements(ns + "table");

编辑:如上所述,如果需要,可以使用XDocument.Root访问根元素。重要的一点是,试图直接从文档节点本身访问table元素是行不通的。

名称空间前缀不能保证是特定的字母或字符串。最好的方法是通过限定的名称空间进行搜索

这将获取XElement xml的所有直接子节点,其中命名空间为uri:namespace

另一个选项是基于完全限定名选择元素


xml是xml字符串,ns是XNameSpace,它是f或hI在做XNameSpace ns=f;但为什么这是错误的呢?顺便说一下,我更喜欢root而不是Elementroot。@Freshblood:f只是XML中名称空间的标签;名称空间的实际值是与其关联的URL。是的,如果愿意,您可以使用XDocument.Root,或者只调用XElement.Parse。
XNamespace ns = "http://www.w3schools.com/furniture";
var query = XDocument.Parse(xml).Element("root").Elements(ns + "table");
var query = XDocument.Parse(xml)
                     .Element("root")
                     .Elements()
                     .Where(element => element.Name.LocalName == "table");
var selectedByNamespace = from element in xml.Elements()
                          where element.Name.NamespaceName == "uri:namespace"
                          select element;
var ns = "{uri:namespace}";
var selectedElements = xml.Elements(ns + "table");