Dot-Net
忽略 LINQ to XML 中的命名空間
我如何擁有 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']