1

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

到目前为止,我尝试过的是:

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

这给了我错误:

需要命名空间管理器或 XsltContext。此查询具有前缀、变量或用户定义的函数。

谁能解释我为什么会收到此错误以及如何解决?

4

1 回答 1

1

我建议看看这个答案:C# XPath help - Expression not working

您需要wsdl在开始查询之前注册命名空间。

例如:

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 的这个答案:需要命名空间管理器或 XsltContext

但是您说您想学习 xPath,所以我想这无关紧要。

于 2013-03-27T09:35:51.890 回答