如何让LINQ to XML iqnore所有名称空间?或者,我如何剥离名称空间呢?
我之所以问这个问题,是因为名称空间是以半随机的方式设置的,我厌倦了必须搜索有名称空间和没有名称空间的 node .
如何让LINQ to XML iqnore所有名称空间?或者,我如何剥离名称空间呢?
我之所以问这个问题,是因为名称空间是以半随机的方式设置的,我厌倦了必须搜索有名称空间和没有名称空间的 node .
而不是写:
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']