我的基本要求是从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出现问题。我是我的助手。
希望这有帮助