我不想为每个元素名称包含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")
};
答案 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));
}
}