从 WSDL(xml 格式)中提取数据时无法获得所需的输出

本文关键字:输出 数据 xml WSDL 格式 提取 | 更新日期: 2023-09-27 18:35:18

我正在尝试从这个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);                                      
            }
        }

从 WSDL(xml 格式)中提取数据时无法获得所需的输出

有几个

问题:)

  1. 命名空间http://schemas.xmlsoap.org/wsdl/不是http://schemas.xmlsoap.org/wsdl - 尾部斜杠使它们完全不同
  2. 根节点wsdl:definitionswsdl: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 to Sql - 您仍然拥有完整的 XPath 解析功能,此外它还具有许多其他好处。