使用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;
}
使用XmlDocument.SelectNodes遍历xml元素遇到的一个XPathException的更多相关文章
- STL中用erase()方法遍历删除元素 .xml
pre{ line-height:1; color:#f0caa6; background-color:#2d161d; font-size:16px;}.sysFunc{color:#e54ae9; ...
- C# 使用XmlDocument类对XML文档进行操作
原创地址:http://www.cnblogs.com/jfzhu/archive/2012/11/19/2778098.html 转载请注明出处 W3C制定了XML DOM标准.很多编程语言中多提供 ...
- [VBS]遍历XML文档
一.脚本源码 使用VBS脚本遍历XML文件 Option Explicit '定义常量 '元素 '文本 'CDATA '实体引用 '实体 '处理指令 '注释 '文档类型 '遍历文件 NameList. ...
- 递归遍历XML节点属性和属性值
public static XmlDocument FileMergedIntoXML(string strXmlPathPublic) { string strXmlPathPublic = str ...
- XML DOM 遍历Xml文档
1.xml文档内容: <?xml version="1.0" encoding="utf-8" ?> <bookstore> <b ...
- 递归遍历XML所有节点
package xml; import org.dom4j.Document; import org.dom4j.DocumentHelper; import org.dom4j.DocumentEx ...
- JavaScript遍历XML总结
1:读取服务器端xml(注意不同浏览器版本的区别),使用XML可以增强系统的扩展性,只用修改XML就可以实现增加减少功能的目的. function loadXMLDoc1(dname){ if ...
- 详解SimpleXML添加_修改_删除_遍历XML节点属性
SimpleXML概述 要处理XML 文件,有两种传统的处理思路:SAX 和DOM.SAX 基于事件触发机制,对XML 文件进行一次扫描,完成要进行的处理:DOM 则将整个XML 文件构造为一棵DOM ...
- 问题:jQuery中遍历XML文件时候,获取子节点children不支持的情况(已解决)
问题描述: 今天在写一个基于 jquery 的读取xml文件的程序时候,需要遍历xml的节点. 代码片段如下: function parse_xml_node(parent,result){ // r ...
随机推荐
- C# - 系统类 - Object类
Object类 ns:System 此类是所有.NET Framework中的类的基类 Type类就派生自Object类 C#提供了object关键字来表示一个类实例的类型 而无需使用Object作为 ...
- 【转】文件中有10G个整数,乱序排列,要求找出中位数
题目:在一个文件中有 10G 个整数,乱序排列,要求找出中位数.内存限制为 2G.只写出思路即可(内存限制为 2G的意思就是,可以使用2G的空间来运行程序,而不考虑这台机器上的其他软件的占用内存). ...
- Java基础知识强化之IO流笔记39:字符流缓冲流之复制文本文件案例01
1. 字符流缓冲流之复制文本文件案例 需求:把当前项目目录下的a.txt内容复制到当前项目目录下的b.txt中 数据源: a.txt -- 读取数据 -- 字符转换流 -- InputStreamRe ...
- 20160406javaweb JDBC 实例工具类
一.建立静态的数据库配置文件: config.properties driver=com.mysql.jdbc.Driver url=jdbc:mysql://localhost:3306/datab ...
- 20160331javaweb之JSP 标签技术
jsp的标签技术:在jsp页面中最好不要出现java代码,这时我们可以使用标签技术将java代码替换成标签来表示 1.jsp标签:sun原生提供的标签直接在jsp页面中就可以使用 <jsp:in ...
- 那天有个小孩跟我说LINQ(一) 转载
1 LINQ准备(代码下载) 新建项目 linq_Ch1控制台程序,新建一个Entity文件夹 1.1 对象初始化器 在Entity新建一个类Student,代码如下 using S ...
- python模块与包
模块是包括python定义和声明的文件.文件名=模块名+".py".模块名保存在全局变量__name__中. 1.模块中的执行语句,只是在导入时执行一次.这些语句通常用于初始化模块 ...
- iOS-开发日志-UIButton
UIButton属性 1.UIButton状态: UIControlStateNormal // 正常状态 UIControlStateHighlighted // 高 ...
- javascript 中caller,callee,call,apply 的概念[转载]
在提到上述的概念之前,首先想说说javascript中函数的隐含参数:arguments Arguments : 该对象代表正在执行的函数和调用它的函数的参数. [function.]argument ...
- 国庆第七日(2014年10月7日17:55:56),随手记,一些关注的OSC软件,花生壳
(1)最难过的是今天. (2)随手记:001.002. (3)htmlunit.joda-time.date4j.jdao.BeanGenerator.JavaScript秘密花园(开源图书) OS ...