使用xpath从wsdl文件中选择所有操作

时间:2013-03-27 09:22:29

标签: c# xpath wsdl

要自动生成一些文档(并学习xpath),我想从WSDL文件中获取所有操作的列表。

到目前为止我尝试的是:

        doc = new XmlDocument();
        doc.Load(@"C:\temp\tempuri.org.wsdl");
        var list = doc.SelectNodes("wsdl:definitions/wsdl:portType/wsdl:operation");

这给了我错误:

  

需要命名空间管理器或XsltContext。这个查询有一个前缀,   变量或用户定义的函数。

任何人都可以解释为什么我会收到此错误以及如何修复它?

1 个答案:

答案 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,所以我觉得它无关紧要。