2011-08-08 43 views
2

我不想为每个元素名称包含xmlns + "ElementName"有没有一种方法来设置从XDocument查询默认命名空间?

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") 
}; 
+0

可以'xmlns'被转换成'string'并会这样做'XML = xml.Replace(xmlns.ToString(), “”)'? – Bastardo

回答

3

不幸的是,这是您使用LINQ to XML时必须完成的工作。每次为特定元素查询文档时,都必须提供名称空间。

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)); 
    } 
} 
相关问题