使用XPath进行XML检索

使用XPath进## XML检索

使用XPath进行XML检索

  1. XPath中的符号
符号说明示例示例说明
/表示从根节点开始选择/Envelope选择根节点/Envelope
表示节点和子节点之间的间隔符
//xx表示从整个xml文档中查找,而不考虑当前节点位置//Body选择文档中所有的price节点
.单个英文半角句点表示选择当前节点/Envelope/.选择Envelope节点
..双点,表示选择父节点/Envelope/Body[0]/…表示Envelope节点,也就是第一个Body节点的父节点
@xx表示选择属性//Body/@color表示选择所有Body节点的color属性集合
[…]中括号表示选择条件,括号内为条件//Body[@color=’white’所有color为white的Body节点
//Body[/price<100]所有price字节点值小于100的dog节点
中括号内数字为节点索引,类似c#等语言中的数组,数组下标是从1开始的//Body[1]第1个Body节点
//Body[last()]最后一个Body节点,last()是xPath内置函数
|单竖杠表示合并节点结合//Body[@color=’white’] | //Body1[@color=’white’]color属性为white的Body节点和color属性为white的Body1节点
*|星号表示任何名字的节点或者属性//Body/*表示Body节点的所有子节点
//Body/@*表示Body节点的所有属性节点
  1. XPath数学运算符
+ 	加号表示加
-	表示数字相减
*	表示乘以
div	表示除以
  1. XPath逻辑运算符
=	等于,相当于c#中的 ==
!=	不等于
>	大于
>=	大于等于
<	小于
<=	小于等于
and	并且 与关系
or	或者 或关系
  1. XPath节点关系运算关键字
关键字说明示例示例说明
ancestor当前节点的父祖节点ancestor::pig当前节点的祖先节点中的pig节点
ancestor-or-self当前节点以及其父祖节点ancestor::pig
attribute当前节点的所有属性attribute::weight相当于@weight,attribute::和@是等价的
child当前节点的所有字节点child:😗[name()!=’price’]选择名字不是price的子节点
descendant子孙节点descendant::[@]有属性的子孙节点
descendant-or-self子孙节点以及当前节点descendant-or-self:😗
followingXml文档中当前节点之后的所有节点following:😗
following-sibling当前节点的同父弟弟节点following-sibling::
precedingXml文档中当前节点之前的所有节点preceding:😗
namespace选取当前节点的所有命名空间节点namespace:😗
parent当前节点的父节点parent::相当于双点…
preceding-sibling当前节点之后的同父兄节点preceding-sibling:😗
self当前节点self:😗相当于单点.
  1. 程序
            /*
            <?xml version='1.0' encoding='UTF-8'?>
             <soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/">
             <soapenv:Body><ns:pipInvokeResponse xmlns:ns=http://X.XXX.com>
             <ns:return>
             {"respond_time\": \"20210510210718066\",
            "inf_refmsgid\": \"37069901202105102107181000188940\",
            "infcode\": 0,
            "resultcode\": 0,
            "output\": \"{}\",
            "resulttext\": \"调用成功\",
            "refmsg_time\": \"20210510210718066\"}
             </ns:return>
             </ns:pipInvokeResponse>
             </soapenv:Body>
             </soapenv:Envelope>";    
             * */
            
            
            string ret_data;
            ret_data = "<?xml version='1.0' encoding='UTF-8'?><soapenv:Envelope xmlns:soapenv=\"http://schemas.xmlsoap.org/soap/envelope/\"><soapenv:Body><ns:pipInvokeResponse xmlns:ns=\"http://X.XX.com\"><ns:return>{";
            ret_data += "\"respond_time\": \"20210510210718066\",";
            ret_data += "\"inf_refmsgid\": \"37069901202105102107181000188940\",";
            ret_data += "\"infcode\": 0,";
            ret_data += "\"resultcode\": 0,";
            ret_data += "\"output\": \"{}\",";
            ret_data += "\"resulttext\": \"调用成功\",";
            ret_data += "\"refmsg_time\": \"20210510210718066\"";
            ret_data += "}</ns:return></ns:pipInvokeResponse></soapenv:Body></soapenv:Envelope>"; 

            XmlDocument doc = new XmlDocument();
            doc.LoadXml(ret_data);
            //方法1
            root.SelectNodes("/Envelope/Body");
           	richTextBox1.AppendText(root.InnerText.ToString());
			//方法2
            XmlNamespaceManager nsp = new XmlNamespaceManager(doc.NameTable);
            nsp.AddNamespace("ab", "http://schemas.xmlsoap.org/soap/envelope/");
            XmlNode Json = root.SelectSingleNode("//ab:Body", nsp);
            richTextBox1.AppendText(Json.InnerText.ToString());
			//方法3:
            //XmlNodeList a = root.SelectNodes("/ab:Envelope", nsp);///ab:Envelope
            //foreach(XmlNode nd in a){
            //    richTextBox1.AppendText(nd.SelectSingleNode("/ab:Envelope/ab:Body", nsp).InnerText.ToString());
           // }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值