• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    公众号

C#读取带命名空间的xml

原作者: [db:作者] 来自: [db:来源] 收藏 邀请

首先带有命名空间的xml读取可以使用Xml.Linq,也可以使用xpath,本文将采用xpath的方式解析。

原文参考了:https://www.cnblogs.com/duanjt/p/5440540.html

同时参考了:https://www.cnblogs.com/shixudong/p/4056400.html

 

首先带有命名空间的xml如下:

<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/">
   <soapenv:Body>
      <ns:queryResponse xmlns:ns="http://release.service.das.jeaw.com">
         <ns:return xsi:type="ax2291:QueryReturnEntity" xmlns:ax2293="http://release.service.das.jeaw.com/xsd" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:ax2291="http://pojo.servgen.das.jeaw.com/xsd">
            <ax2291:code>DAS00000</ax2291:code>
            <ax2291:message>服务访问成功</ax2291:message>
            <ax2291:totalRowCount>1</ax2291:totalRowCount>
            <ax2291:currentPageNo>1</ax2291:currentPageNo>
            <ax2291:datas xsi:type="ax2293:EntityGZ_GZBDJXX">
               <ax2293:GZYXM_1>吕姗姗</ax2293:GZYXM_1>
               <ax2293:GZYZBH_1 xsi:nil="true"/>
               <ax2293:ID_1 xsi:nil="true"/>
            </ax2291:datas>
            <ax2291:pageSize>1</ax2291:pageSize>
            <ax2291:totalPageCount>1</ax2291:totalPageCount>
         </ns:return>
      </ns:queryResponse>
   </soapenv:Body>
</soapenv:Envelope>

 

解析如上的xml,就涉及到两个类,XmlNamespaceManager和XmlDocument。XmlDocument用于解析xml,而XmlNamespaceManager则是和命名空间相关的类。

如上的xml,如果我们想要获取到吕姗姗ID_1的true怎么实现呢,代码如下:

 

string xmlStr = "<soapenv:Envelope xmlns:soapenv=\"http://schemas.xmlsoap.org/soap/envelope/\"> <soapenv:Body> <ns:queryResponse xmlns:ns=\"http://release.service.das.jeaw.com\"> <ns:return xsi:type=\"ax2291:QueryReturnEntity\" xmlns:ax2293=\"http://release.service.das.jeaw.com/xsd\" xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" xmlns:ax2291=\"http://pojo.servgen.das.jeaw.com/xsd\"> <ax2291:code>DAS00000</ax2291:code> <ax2291:message>服务访问成功</ax2291:message> <ax2291:totalRowCount>1</ax2291:totalRowCount> <ax2291:currentPageNo>1</ax2291:currentPageNo> <ax2291:datas xsi:type=\"ax2293:EntityGZ_GZBDJXX\"> <ax2293:GZYXM_1>吕姗姗</ax2293:GZYXM_1> <ax2293:GZYZBH_1 xsi:nil=\"true\"/> <ax2293:ID_1 xsi:nil=\"true\"/> </ax2291:datas> <ax2291:pageSize>1</ax2291:pageSize> <ax2291:totalPageCount>1</ax2291:totalPageCount> </ns:return> </ns:queryResponse> </soapenv:Body> </soapenv:Envelope>";

XmlDocument doc = new XmlDocument();
doc.LoadXml(xmlStr);
XmlNamespaceManager nsMgr = new XmlNamespaceManager(doc.NameTable);//这一步实例化一个xml命名空间管理器
nsMgr.AddNamespace("soapenv", "http://schemas.xmlsoap.org/soap/envelope/");
nsMgr.AddNamespace("ns", "http://release.service.das.jeaw.com");
nsMgr.AddNamespace("ax2293", "http://release.service.das.jeaw.com/xsd");
nsMgr.AddNamespace("xsi", "http://www.w3.org/2001/XMLSchema-instance");
nsMgr.AddNamespace("ax2291", "http://pojo.servgen.das.jeaw.com/xsd");

XmlNode nodeGZYXM = doc.SelectSingleNode("soapenv:Envelope/soapenv:Body/ns:queryResponse/ns:return/ax2291:datas/ax2293:GZYXM_1", nsMgr);
Console.WriteLine(nodeGZYXM.InnerText); //将输出 吕姗姗

XmlNode nodeId = doc.SelectSingleNode("soapenv:Envelope/soapenv:Body/ns:queryResponse/ns:return/ax2291:datas/ax2293:ID_1/@xsi:nil", nsMgr); //@xsi:nil表示获取Attribute而不是node节点
Console.WriteLine(nodeId.InnerText); //将输出 true

 


鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
上一篇:
C#中窗口AutoScaleMode属性发布时间:2022-07-13
下一篇:
c#HttpWebRequest与HttpWebResponse(转)发布时间:2022-07-13
热门推荐
热门话题
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap