我的基本要求是从xml文件中获取元素值,我使用了xmldoxument.selectsinglenode。我的xml文件在头中包含一些名称空间,所以我使用namespacemanager来添加名称空间前缀,并使用前缀来获取特定元素。现在,在我的XML文件中,命名空间的变化越来越大,我不想做任何硬编码,有没有方法可以找出所有的命名空间,我可以把它添加到NAMESACPEMANER中。
谢谢。

最佳答案

命名空间可以在XML文档的任何地方找到。因此,要提取所有命名空间并将其声明到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;
}

只需注意默认的名称空间大小写。我将默认名称空间重新定义为“默认”前缀,因为在查询默认名称空间时,使用上面返回的名称空间管理器使selectsinglenode出现问题。我是我的助手。
希望这有帮助

10-06 11:06