Dot-Net

忽略 LINQ to XML 中的命名空間

  • July 17, 2009

我如何擁有 LINQ to XML iqnore 所有命名空間?或者,我如何剝離命名空間?

我之所以問,是因為命名空間是以半隨機方式設置的,而且我厭倦了必須搜尋有和沒有命名空間的節點。

而不是寫:

nodes.Elements("Foo")

寫:

nodes.Elements().Where(e => e.Name.LocalName == "Foo")

當您厭倦了它時,請製作自己的擴展方法:

public static IEnumerable<XElement> ElementsAnyNS<T>(this IEnumerable<T> source, string localName)
   where T : XContainer
{
   return source.Elements().Where(e => e.Name.LocalName == localName);
}

屬性同上,如果您必須經常處理命名空間屬性(這是相對罕見的)。

[編輯] 為 XPath 添加解決方案

對於 XPath,而不是編寫:

/foo/bar | /foo/ns:bar | /ns:foo/bar | /ns:foo/ns:bar

你可以使用local-name()功能:

/*[local-name() = 'foo']/*[local-name() = 'bar']

引用自:https://stackoverflow.com/questions/1145659