有没有办法将默认命名空间设置为从XDocument查询?

时间:2011-08-08 18:29:10

标签: c# linq linq-to-xml

我不想为每个元素名称包含xmlns + "ElementName"

XDocument xml = XDocument.Load(@"C:\file.xml");
XNamespace xmlns = "http://www.com/namespace";
var vehicles = from vehicle in xml.Descendants(xmlns + "Element")
               select vehicle.Element(xmlns + "Item")
};

3 个答案:

答案 0 :(得分:3)

不幸的是,这是使用LINQ to XML时必须执行的操作。每次查询特定元素的文档时,都必须提供命名空间。

答案 1 :(得分:0)

看起来斯科特汉塞尔曼不久前已经写了一些笔记。不完全是你想要的,也许(在帖子中有一些Linq to XML示例),但无论如何这里是链接:http://www.hanselman.com/blog/GetNamespacesFromAnXMLDocumentWithXPathDocumentAndLINQToXML.aspx

另见这个问题:How to set the default XML namespace for an XDocument

答案 2 :(得分:0)

即使为时已晚,但也许它会帮助像我这样的人!

您可以添加一个扩展方法作为内置的包装器!

像这样:

public static class XDoncumentExtentions
{
    private static string DefaultNamespace = "{http://schemas.openxmlformats.org/spreadsheetml/2006/main}";
    public static IEnumerable<XElement> DescendantsSimple(this XContainer me, string simpleName)
    {
        return me.Descendants(string.Format("{0}{1}", DefaultNamespace, simpleName));
    }

    public static IEnumerable<XElement> ElementsSimple(this XContainer me, string simpleName)
    {
        return me.Elements(string.Format("{0}{1}", DefaultNamespace, simpleName));
    }

    public static XElement ElementSimple(this XContainer me, string simpleName)
    {
        return me.Element(string.Format("{0}{1}", DefaultNamespace, simpleName));
    }
}