我试图在此代码中按XmlNamespaceManager
获取所有已定义命名空间的列表:
var manager = new XmlNamespaceManager(xmlDoc.NameTable);
var dic = manager.GetNamespacesInScope(XmlNamespaceScope.All);
这是我的xml:
<?xml version='1.0' encoding='UTF-8'?>
<psf:PrintCapabilities
version='1'
xmlns:psf='http://schemas.microsoft.com/windows/2003/08/printing/printschemaframework'
xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance'
xmlns:xsd='http://www.w3.org/2001/XMLSchema'
xmlns:ns0000='http://schemas.microsoft.com/windows/printing/oemdriverpt/Lexmark T650/6.1.7601.17514/'
xmlns:psk='http://schemas.microsoft.com/windows/2003/08/printing/printschemakeywords'>
</psf:PrintCapabilities>
有趣的是GetNamespacesInScope()方法只返回一个项目( key =“xml”,value =“http://www.w3.org/XML/1998/namespace”)
这里缺少什么?
注意:即使我使用其中一个已定义的名称空间前缀(例如添加<ns0000:a>hi</ns0000:a>
),它也不会改变任何内容。
答案 0 :(得分:1)
尝试使用XPathDocument以及XmlNamespaceScope ......这样的东西会起作用
XPathDocument x = new XPathDocument(new StringReader(xml));
XPathNavigator foo = x.CreateNavigator();
foo.MoveToFollowing(XPathNodeType.Element);
IDictionary<string, string> namespaces = foo.GetNamespacesInScope(XmlNamespaceScope.All);
答案 1 :(得分:0)
我相信你的问题是那些不是命名空间,那些是命名空间声明。
如果您实际上使用了这些名称空间,那么它们将作为名称表中节点上的名称空间存在,因此XmlNamespaceManager会向您显示它们。实际上,它只显示xml
命名空间,它隐式存在于所有XML文档中。