Вместо записи:
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 вместо написания :
/foo/bar | /foo/ns:bar | /ns:foo/bar | /ns:foo/ns:bar
вы можете использовать функцию local-name()
:
/*[local-name() = 'foo']/*[local-name() = 'bar']