gpt4 book ai didi

c# - 我如何列出 XML 中的所有 namespace ?

转载 作者:可可西里 更新时间:2023-11-01 08:19:00 26 4
gpt4 key购买 nike

我的基本要求是从 XML 文件中获取元素值,我使用了 XMLDoxument.SelectSingleNode。我的 XML 文件在 header 中包含一些命名空间,因此我使用 NameSpaceManager 添加命名空间前缀,并使用前缀来获取该特定元素。现在,在我的 XML 文件中,命名空间正在发生变化,我不想进行任何硬编码,有什么方法可以找出所有命名空间并将其添加到 NameSpaceManager。

谢谢。

最佳答案

命名空间可以在 xml 文档中的任何地方找到。因此,为了提取所有 namespace 并将它们声明到 XmlNamespaceManager 中,我执行了以下操作:

public static XmlNamespaceManager getAllNamespaces(XmlDocument xDoc)
{
XmlNamespaceManager result = new XmlNamespaceManager(xDoc.NameTable);

IDictionary<string, string> localNamespaces = null;
XPathNavigator xNav = xDoc.CreateNavigator();
while (xNav.MoveToFollowing(XPathNodeType.Element))
{
localNamespaces = xNav.GetNamespacesInScope(XmlNamespaceScope.Local);
foreach (var localNamespace in localNamespaces)
{
string prefix = localNamespace.Key;
if (string.IsNullOrEmpty(prefix))
prefix = "DEFAULT";

result.AddNamespace(prefix, localNamespace.Value);
}
}

return result;
}

只需注意默认命名空间的情况。我将默认命名空间重新定义为“DEFAULT”前缀,因为在查询默认命名空间时使用上面返回的命名空间管理器制作 SelectSingleNode 时遇到问题。我是我的解决方法。希望这有帮助

关于c# - 我如何列出 XML 中的所有 namespace ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/767541/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com