如何获取IXmlNamespaceResolver

And*_*ndy 12 c# xml xml-namespaces

我正在尝试调用需要IXmlNamespaceResolver对象的XElement.XPathSelectElements()重载.谁能告诉我如何获取(或制作)IXmlNamespaceResolver?我有一个我想在查询中使用的命名空间列表

dav*_*low 11

使用new XmlNamespaceManager(new NameTable()).

例如,如果您有一个使用名称空间的XML文档

var xDoc = XDocument.Parse(@"<m:Student xmlns:m='http://www.ludlowcloud.com/Math'>
    <m:Grade>98</m:Grade>
    <m:Grade>96</m:Grade>
</m:Student>");
Run Code Online (Sandbox Code Playgroud)

然后你可以Grade通过这样做获得节点

var namespaceResolver = new XmlNamespaceManager(new NameTable());
namespaceResolver.AddNamespace("math", "http://www.ludlowcloud.com/Math");
var grades = xDoc.XPathSelectElements("//math:Student/math:Grade", namespaceResolver);
Run Code Online (Sandbox Code Playgroud)


ilt*_*rtz 7

您可以使用实现该接口的XmlNamespaceManager

使用构造函数,它接受一个via XmlNameTable的实例.然后,您可以调用函数来添加名称空间:System.Xml.NameTablenew NameTable()AddNamespace

var nsMgr = new XmlNamespaceManager(new NameTable());
nsMgr.AddNamespace("ex", "urn:example.org");
nsMgr.AddNamespace("t", "urn:test.org");
doc.XPathSelectElements("/ex:path/ex:to/t:element", nsMgr);
Run Code Online (Sandbox Code Playgroud)

  • 没有无参数构造函数.请参阅[this](http://msdn.microsoft.com/en-us/library/system.xml.xmlnamespacemanager.xmlnamespacemanager(v = vs.110).aspx)文章. (11认同)