今天使用C#中XMLDocument来读取配置文件中的XML节点,写的时候发现xml文件出现有的文件能够读到节点,有的文件却读取不到节点,纠结了很久,后来发现原来是xml文件中的命名空间惹得祸。

xml文件,大家都知道,为了避免xml中元素命名的冲突,所以xml中可以自定义命名空间,但是在用SelectNodes查询元素时候就会发现,坑爹的问题出现了,这时候就无法找到对应的元素了。如下面

<?xml version="1.0" encoding="UTF-8"?>
<hibernate-configuration  xmlns="urn:nhibernate-configuration-2.2" ><session-factory name="Server"><property name="connection.driver_class">NHibernate.Driver.MySqlDataDriver</property><property name="dialect">NHibernate.Dialect.MySQLDialect</property><property name="connection.connection_string">server=192.168.30.46;port=8306;Database=***;uid=***;pwd=*</property>.......<mapping assembly="StealSecret.Model"/></session-factory>
</hibernate-configuration>

这里在hibernate-configuration这个标签后有xmlns,这个就是定义的命名空间,xmlnamespace。这个时候,如果要读取xml文件就需要在XmlDocument对象中加上命名空间。

            XmlDocument doc = new XmlDocument();doc.Load(path + "Config/hibernate.cfg.xml");XmlNamespaceManager m = new XmlNamespaceManager ( doc.NameTable );m.AddNamespace("nhb", "urn:nhibernate-configuration-2.2");XmlNodeList xmlNodes = doc.SelectNodes("//nhb:session-factory/nhb:property[@name='connection.connection_string']", m);

注意这里AddNamespace方法的前面一个参数用于标记这个命名空间,在下面SelectNodes方法中加上对应的标记。给出的这一段是为了查找数据库连接字符串的节点。顺便附带扯下SelectNodes中XPath的语法:

SelectNodes("node")          从当前子节点中查找节点

SelectNodes("/node")         从根节点的子节点中查找节点

SelectNodes("//node")        从任意位置上查找名为node的节点

SelectNodes(".")                 选择当前节点

SelectNodes("..")                选择当前节点父节点

SelectNodes("//node[1]")    选择名为node的第一个节点,注意这里是从1开始,不是从0开始

SelectNodes("/@name")    选择有name属性的节点

SelectNodes("/node[position() < 3]")           选择名为node的前两个节点

SelectNodes("//node[@name]")                  选择node节点,并且该节点有name属性

SelectNodes("//node[@name='limit']")        选择node节点,并且该节点有name属性,而且name属性值为limit

SelectNodes("//node[contains(item)]")        选择node节点,该节点存在名字item的子节点,注意,如果有命名空间,这里要加命名空间,XX:item

SelectNodes("//node[contains(item,‘Hello World’)]")        选择node节点,该节点存在名字item的子节点,并且item节点内容为Hello World

C#中SelectNodes找不到节点相关推荐

  1. 递增的整数序列链表的插入_每日算法题 | 剑指offer 链表专题 (5)链表中倒数第k个节点...

    点击上方"Jerry的算法和NLP",选择"星标"公众号 重磅干货,第一时间送达 题目 链表中倒数第k个节点 题目要求 输入一个链表的头结点,从尾到头反过来打印 ...

  2. 在 ServiceModel 客户端配置部分中,找不到引用协定“WebServiceSoap”的默认终结点元素。这可能是因为未找到应用程序的配置文件,或者是因为客户端元素找不到与此协定匹配的终结点元素

    在引用WebService后,程序运行到实例化WebService时报错,错误如下: 由于WebService我是在类库里添加的,主程序引用了这个类库,就出现了这个问题. 解决办法: 根据异常信息: ...

  3. python 删除链表中倒数第N个节点

    | 删除链表中倒数第N个节点 给你一个链表,删除链表的倒数第 n 个结点,并且返回链表的头结点. 输入:head = [1,2,3,4,5], n = 2 输出:[1,2,3,5] 示例 2: 输入: ...

  4. python 链表中倒数第k个节点

    | 返回链表中倒数第K个节点 输入一个链表,输出该链表中倒数第k个节点.为了符合大多数人的习惯,本题从1开始计数,即链表的尾节点是倒数第1个节点. 例如,一个链表有 6 个节点,从头节点开始,它们的值 ...

  5. 剑指offer面试题15:链表中倒数第K个节点

    题目:输入一个链表,输出该链表的倒数第K个节点.为了符合大多数人的习惯,本题从1开始计数,即链表尾节点是倒数第一个节点. 解题思路: 解法一:一般情况下,单向链表无法从后一个节点获取到它前面的节点,可 ...

  6. 【剑指offer - C++/Java】14、链表中倒数第k的节点

    在线题目链接:链表中倒数第k的节点 文章目录 1 题目描述 2 题目分析 2.1 Java代码 2.2 C++代码 3 总结 1 题目描述 输入一个链表,输出该链表中倒数第k个结点. 2 题目分析 这 ...

  7. 剑指offer——22.链表中倒数第k个节点

    题目: 输入一个链表,输出该链表中倒数第k个结点. 知识点: 注意这种想法:找倒数第几个.中间的数或三分之一的数这种题,可以利用两个指针,通过指针移动的不同方式来实现 注意: 还是考虑的情况要周全,此 ...

  8. DOM算法系列002-寻找指定DOM节点的上一个或下一个节点

    DOM操作算法002-寻找指定DOM节点的上一个或下一个节点-- getDomNode 当我们需要寻找指定DOM节点的上一个节点或下一个节点时,我们可能第一时间会想到下面两个API: node.pre ...

  9. 二叉树前中后序遍历以及节点计算

    二叉树前中后序遍历以及节点计算 二叉树 分类 二叉链的数据结构 三叉链的数据结构 四种遍历方法 深度优先遍历:前中后序 广度优先遍历:层序遍历 计算 节点个数 叶子节点个数 树的高度 第k层的节点个数 ...

最新文章

  1. 让 PyTorch 更轻便,这款深度学习框架你值得拥有!在 GitHub 上斩获 6.6K 星
  2. springmvc + jquery 错误.ClassNotFoundException: org.apache.taglibs.standard.tlv.JstlCoreTLV
  3. 紧急!Log4j 史诗级漏洞来袭,已引起大规模入侵,速速自查!
  4. The service command supports only basic LSB actions (start, stop, restart, try-restart, reload, forc
  5. Linux的守护进程
  6. Android 下拉刷新用法
  7. php5.3 PHP5.4 PHP5.5 php5.6 新特性/使用PHP5.5/PHP5.6要注意的
  8. 总结---Django部分
  9. win10关闭windows聚焦_关于Windows 10 Windows聚焦功能失效
  10. python去重脚本
  11. 100条修身养性的句子
  12. 萌言萌语|测试工作日报及总结
  13. java版地图源码_TreeMap就这么简单【源码剖析】
  14. 无线专题 wifi、AP、mac、phy、MII 、Ethernet Switch相关概念
  15. arcgis直方图导出地图_利用Arcgis地图工具自动输出报告地图图纸
  16. css animate动画demo
  17. 百度网盘如何取消自动登录
  18. 腾讯自研新一代AV1编解码器
  19. Ubuntu-12.04 OpenStack (Folsom)安装和部署手册
  20. springboot项目登录+注册

热门文章

  1. C++ 23种设计模式
  2. 说起创业,朋友说要有100%的把握我们再去创业,如果没有100%需要80%,你咋看?
  3. 【2023春招】西山居游戏研发岗笔试AK
  4. 吐血整理MyBatis面试题大全
  5. 创科CK-RTU-360系列RTU遥测终端机
  6. Linux查看进程,杀死进程命令
  7. OWASP Top 10大漏洞简要介绍
  8. Python中的配置文件
  9. 排序算法——1冒泡排序算法
  10. win7系统菜单栏的搜索功能消失怎么找回?