我试图从这个WSDL文件(xml格式)" http://pastebin.com/gF7aHwa3"中获取一些数据,例如,wsdl:service name的值,即CinemaData。 使用此代码没有任何价值:
static void Main(string[] args)
{
XmlDocument doc = new XmlDocument();
doc.Load(@"C:\wsdl\0_Argentina_CinemaData.wsdl");
XmlNamespaceManager nsmgr = new XmlNamespaceManager(doc.NameTable);
//nsmgr.AddNamespace("soap", "http://schemas.xmlsoap.org/wsdl/soap");
//nsmgr.AddNamespace("tm", "http://microsoft.com/wsdl/mime/textMatching");
//nsmgr.AddNamespace("soapenc", "http://schemas.xmlsoap.org/soap/encoding");
//nsmgr.AddNamespace("mime", "http://schemas.xmlsoap.org/wsdl/mime");
//nsmgr.AddNamespace("tns", "http://www.e-wavegroup.com");
//nsmgr.AddNamespace("s", "http://www.w3.org/2001/XMLSchema");
//nsmgr.AddNamespace("soap12", "http://schemas.xmlsoap.org/wsdl/soap12");
//nsmgr.AddNamespace("http", "http://schemas.xmlsoap.org/wsdl/http");
//nsmgr.AddNamespace(String.Empty, "http://www.e-wavegroup.com");
nsmgr.AddNamespace("wsdl", "http://schemas.xmlsoap.org/wsdl");
XmlNodeList SNameNodes = doc.DocumentElement.SelectNodes("//wsdl:definition/wsdl:service", nsmgr);
List<serviceName> snList = new List<serviceName>();
foreach (XmlNode node in SNameNodes)
{
System.Console.WriteLine("The service name is " + node.Attributes["name"].Value);
}
}
答案 0 :(得分:0)
有几个问题:)
http://schemas.xmlsoap.org/wsdl/
而非http://schemas.xmlsoap.org/wsdl
- 尾部斜杠使它们完全不同wsdl:definitions
而不是wsdl:definition
所以:
var nsmgr = new XmlNamespaceManager(doc.NameTable);
nsmgr.AddNamespace("wsdl", "http://schemas.xmlsoap.org/wsdl/");
var SNameNodes = doc.SelectNodes("/wsdl:definitions/wsdl:service", nsmgr);
foreach (XmlNode node in SNameNodes)
{
System.Console.WriteLine("The service name is " + node.Attributes["name"].Value);
}
您也可以直接从文档中访问SelectNodes
,并且假设wsdl:definitions
是根节点,您不需要双斜杠。
最后一点 - 您可能希望查看迁移到Linq到Sql - 您仍然具有完整的XPath解析功能,而且它具有many other benefits。