使用XmlDocument.SelectNodes遍历xml元素遇到的一个XPathException

使用XmlDocument类时候报错:

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

需要使用XmlNamespaceManager类:Resolves, adds, and removes namespaces to a collection and provides scope management for these namespaces.

这是因为使用的soap文档含有自己的命名空间。相同问题:http://bbs.csdn.net/topics/350101606

最终修改后的代码:

 string soap = "";
                    soap += "<SOAP-ENV:Envelope xmlns:SOAP-ENV=\"http://schemas.xmlsoap.org/soap/envelope/\">";
                    soap += "<SOAP-ENV:Body>";
                    soap += "<AP-MSG:SubscriptionRequest xmlns:AP-MSG=\"http://www.vestas.dk/2001/04/ap\" xmlns:SOAP-ENC=\"http://schemas.xmlsoap.org/soap/encoding/\">";
                    soap += "<RequestBase ClientRequestHandle=\"41\" ReturnItemTime=\"false\" ReturnItemName=\"true\" CallbackURL=\"10.116.21.222:1055\" CallbackRate=\"PT10S\"/>";
                    soap += "<ItemRequestSpec MaxAge=\"PT0.1S\"/>";
                    soap += "<ItemList>";
                    foreach (IoTag tag in Tags)
                    {
                        soap += string.Format("<Item ItemName=\"{0}\"/>", tag.Name);
                    }
                    soap += "</ItemList>";
                    soap += "</AP-MSG:SubscriptionRequest>";
                    soap += "</SOAP-ENV:Body>";
                    soap += "</SOAP-ENV:Envelope>";
                    string subscriptionRequest = "";
                    subscriptionRequest += "POST * HTTP/1.1\r\n";
                    subscriptionRequest += "Content-Type:text/xml;charset=ISO-8859-1\r\n";
                    subscriptionRequest += "Connection:Keep-Alive\r\n";
                    subscriptionRequest += "SOAPAction:http://www.vestas.dk/2001/04/ap#SubscriptionRequest\r\n";
                    subscriptionRequest += string.Format("Content-Length:{0}\r\n", soap.Length);
                    subscriptionRequest += "\r\n";
                    subscriptionRequest += soap;

                    XmlDocument xDoc = new XmlDocument();
                    xDoc.LoadXml(soap);
                    XmlNamespaceManager nsMgr = new XmlNamespaceManager(xDoc.NameTable);
                    nsMgr.AddNamespace("SOAP-ENV", "http://schemas.xmlsoap.org/soap/envelope/");
                    nsMgr.AddNamespace("AP-MSG", "http://www.vestas.dk/2001/04/ap");
                    nsMgr.AddNamespace("SOAP-ENC", "http://schemas.xmlsoap.org/soap/encoding/");
                    XmlElement xe = xDoc.DocumentElement;
                    XmlNodeList xnl = xDoc.SelectNodes("/SOAP-ENV:Envelope/SOAP-ENV:Body/AP-MSG:SubscriptionRequest/ItemList/Item", nsMgr);

            foreach (XmlNode item in xnl) { string s = item.Attributes["ItemName"].Value; }

 

转载于:https://www.cnblogs.com/jumahe/p/4540733.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值