用XmlDocument查找含有域名空间的节点
在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");//失败
分类:
XML
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 周边上新:园子的第一款马克杯温暖上架
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· Ollama——大语言模型本地部署的极速利器
· 使用C#创建一个MCP客户端
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
2017-07-24 在指定的ChartArea中显示Series