有没有办法将默认命名空间设置为从 XDocument 查询?
Posted
技术标签:
【中文标题】有没有办法将默认命名空间设置为从 XDocument 查询?【英文标题】:Is there a way to set the default namespace to query from an XDocument? 【发布时间】:2011-08-08 18:29:09 【问题描述】:我不想在每个元素名称中都包含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")
;
【问题讨论】:
可以将xmlns
转换为string
吗?可以这样做xml = xml.Replace(xmlns.ToString(), "")
吗?
【参考方案1】:
不幸的是,这是您在使用 LINQ to XML 时必须做的事情。每次在文档中查询特定元素时,都必须提供命名空间。
【讨论】:
【参考方案2】:看起来 Scott Hanselman 不久前写过一些笔记。可能不完全是您要查找的内容(帖子中有一些 Linq to XML 示例),但无论如何,这是链接:http://www.hanselman.com/blog/GetNamespacesFromAnXMLDocumentWithXPathDocumentAndLINQToXML.aspx
另请参阅这个 SO 问题:How to set the default XML namespace for an XDocument
【讨论】:
【参考方案3】:即使为时已晚,但也许它可以帮助像我这样的其他人!
您可以添加一个扩展方法来充当内置方法的包装器!
像这样:
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("01", DefaultNamespace, simpleName));
public static IEnumerable<XElement> ElementsSimple(this XContainer me, string simpleName)
return me.Elements(string.Format("01", DefaultNamespace, simpleName));
public static XElement ElementSimple(this XContainer me, string simpleName)
return me.Element(string.Format("01", DefaultNamespace, simpleName));
【讨论】:
以上是关于有没有办法将默认命名空间设置为从 XDocument 查询?的主要内容,如果未能解决你的问题,请参考以下文章