ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

用XmlDocument查找含有域名空间的节点

2022-07-24 15:32:45  阅读:144  来源: 互联网

标签:aa nsmgr doc XmlDocument SelectNodes 域名空间 查找 var Response


Xml中SelectSingleNode方法,xpath查找某节点用法 - bxzjzg - 博客园 (cnblogs.com)帖子钟,给出了多种查找节点的方法。

这些方法,部分方法是不成功的,但仅限于读取没有域名空间的XML文件。如果XML文件中带有域名空间,则没有办法读出来。

读取带有域名空间的XML文件,需要在SelectNodes或者SelectSingleNode携带域名空间管理器对象XmlNamespaceManager查找,官方定义为:

public XmlNodeList SelectNodes(string xpath, XmlNamespaceManager nsmgr);

下面给出使用案例。

1. 假设要访问的数据如下:

 1 <?xml version="1.0"?>
 2 <PIM>
 3 <Responses Legacy="FALSE">
 4  <Response Action="SetTxFreqs" Units="" />
 5  <Response Action="GetImFreqs" Units="MHz">
 6  <Double>1870.00</Double>
 7  <Double>1810.00</Double>
 8  <Double>1750.00</Double>
 9  <Double>1690.00</Double>
10  </Response>
11  <Response Action="GetImPower" Units="dBm">
12  <Double>-115.85</Double>
13  <Double>-200.00</Double>
14  <Double>-200.00</Double>
15  <Double>-200.00</Double>
16  </Response>
17 </Responses>
18 </PIM>

2.以下为测试代码:

XmlDocument doc = new XmlDocument();
doc.Load("PimResponseDemo1.xml");
                        
XmlNode root = doc.DocumentElement;
            //定义域名空间
XmlNamespaceManager nsmgr = new XmlNamespaceManager(doc.NameTable);
nsmgr.AddNamespace("aa", "http://www.kaelus.com");

var list1 = doc.SelectNodes("aa:PIM/aa:Responses/aa:Response", nsmgr);//完整路径查找,成功
var list2 = doc.SelectNodes("//aa:Response", nsmgr); //跨过所有父级节点查找,成功
var list3 = doc.SelectNodes("aa:PIM//aa:Response", nsmgr); //跨过中间节点,成功
var node1 = doc.SelectSingleNode("aa:PIM/aa:Responses/aa:Response[@Action='GetImFreqs']", nsmgr);//带属性查找,成功

var list5 = doc.SelectNodes("PIM/Responses/Response"); //没有带上域名,失败
var list6 = doc.SelectNodes("Responses/Response");//无域名,失败
var list7 = doc.SelectNodes("aa:Responses/aa:Response", nsmgr);//相对路径查找,失败
var list8 = doc.SelectNodes("../Response");//失败
var list9 = doc.SelectNodes("../aa:Response", nsmgr);//失败
var list10 = doc.SelectNodes("PIM//Response"); //无域名,失败


var node2 = doc.SelectSingleNode("PIM/Responses/Response[@Action='GetImFreqs']");//无域名,失败
var node3 = doc.SelectSingleNode("aa:PIM/Responses/Response", nsmgr);//失败
var node4 = doc.SelectSingleNode("aa:PIM/aa:Responses/aa:Response[@aa:Action='GetImFreqs']", nsmgr);//标志位置错误,失败
var node5 = doc.SelectSingleNode("PIM/Responses/Response");//失败

 

标签:aa,nsmgr,doc,XmlDocument,SelectNodes,域名空间,查找,var,Response
来源: https://www.cnblogs.com/ccjungle/p/16514553.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有