如何让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);
}

属性也是如此,如果您必须经常处理带名称空间的属性(这相对较少).

[EDIT]为XPath添加解决方案

对于XPath,不是编写:

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

您可以使用local-name()函数:

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

.net相关问答推荐

升级到.NET8后,SignalR(在坞站容器上)网关损坏

SLN配置文件:映射问题

PowerShell 5.1和7在使用证书时的区别

如何通过在后台预加载流项来优化流迭代的性能?

如何在 Windows 窗体上显示 ClickOnce 版本号

查找 2 个已知值之间的字符串

如何在 ASP.NET Core MVC 中读取操作方法的属性?

无法加载文件或程序集 Microsoft.Extensions.DependencyInjection.Abstractions,版本 = 1.1.0.0

整个命名空间的SuppressMessage

String 是原始类型吗?

如何正确停止BackgroundWorker

Int 到字节数组

仅使用 XAML 绘制纯色三角形

如何正确和完全关闭/重置 TcpClient 连接?

在 WPF DataGrid 中绑定 ComboBoxColumn 的 ItemsSource

在 .NET 中获取默认打印机的最佳方法是什么

为什么要使用 C# 类 System.Random 而不是 System.Security.Cryptography.RandomNumberGenerator?

如何将 VB 项目转换为 C# 项目

在foreach循环中修改列表的最佳方法是什么?

什么时候使用 Tuple 和 KeyValuePair 比较好?