要自动生成一些文档(并学习xpath),我想从WSDL文件中获取所有操作的列表。
到目前为止我尝试的是:
doc = new XmlDocument();
doc.Load(@"C:\temp\tempuri.org.wsdl");
var list = doc.SelectNodes("wsdl:definitions/wsdl:portType/wsdl:operation");
这给了我错误:
需要命名空间管理器或XsltContext。这个查询有一个前缀, 变量或用户定义的函数。
任何人都可以解释为什么我会收到此错误以及如何修复它?
答案 0 :(得分:1)
我建议您查看以下答案:C# XPath help - Expression not working
在开始查询命名空间之前,您需要注册命名空间wsdl
。
e.g:
XPathDocument xDoc = new XPathDocument(@"C:\temp\tempuri.org.wsdl");
XPathNavigator xNav = xDoc.CreateNavigator();
XmlNamespaceManager mngr = new XmlNamespaceManager(xNav.NameTable);
mngr.AddNamespace("wsdl", "http://schemas.xmlsoap.org/wsdl/"); // this namespace may need to be different - I don't know what your wsdl file looks like
XPathNodeIterator xIter = xNav.Select("wsdl:definitions/wsdl:portType/wsdl:operation",mngr);
或者您可以使用LINQ to XML - 请参阅Jon Skeet的回答:Namespace Manager or XsltContext needed
但是你说你想学习xPath,所以我觉得它无关紧要。