由于某种原因,XmlNamespaceManager 不会自动加载文档中定义的命名空间(这似乎是一个简单的期望)。由于某种原因,命名空间声明被视为属性。我能够使用以下代码自动添加命名空间。
private static XmlNamespaceManager AddNamespaces(XmlDocument xmlDoc)
{
XmlNamespaceManager nsmgr = new XmlNamespaceManager(xmlDoc.NameTable);
AddNamespaces(xmlDoc.ChildNodes, nsmgr);
return nsmgr;
}
private static void AddNamespaces(XmlNodeList nodes, XmlNamespaceManager nsmgr) {
if (nodes == null)
throw new ArgumentException("XmlNodeList is null");
if (nsmgr == null)
throw new ArgumentException("XmlNamespaceManager is null");
foreach (XmlNode node in nodes)
{
if (node.NodeType == XmlNodeType.Element)
{
foreach (XmlAttribute attr in node.Attributes)
{
if (attr.Name.StartsWith("xmlns:"))
{
String ns = attr.Name.Replace("xmlns:", "");
nsmgr.AddNamespace(ns, attr.Value);
}
}
if (node.HasChildNodes)
{
nsmgr.PushScope();
AddNamespaces(node.ChildNodes, nsmgr);
nsmgr.PopScope();
}
}
}
}
示例调用示例:
XmlDocument ResponseXmlDoc = new System.Xml.XmlDocument();
...<Load your XML Document>...
XmlNamespaceManager nsmgr = AddNamespaces(ResponseXmlDoc);
并使用返回的 NamespaceManager
XmlNodeList list = ResponseXmlDoc.SelectNodes("//d:response", nsmgr);