操作XML(带命名空间)

之前文章讲述了使用c# xpath如何操作xml文件,在实际开发项目中,遇到的很多xml文件都是带有命名空间的,如果还是用之前的代码获取,那将获取到null。

本文讲解操作代码有命名空间的Xml文件,以及多个命名空间的xml。

go 复制代码
<?xml version="1.0" encoding="utf-8" ?>
<bookstore xmlns="http://example.books.com">
  <book genre="autobiography" publicationdate="1991" ISBN="1-861003-11-0">
    <title>The Autobiography of Benjamin Franklin</title>
    <author>
      <first-name>Benjamin</first-name>
      <last-name>Franklin</last-name>
    </author>
    <price>8.99</price>
  </book>
  <sp:book genre="novel" publicationdate="1967" ISBN="0-201-63361-2" xmlns:sp="http://example.book.com">
    <title>The Confidence Man</title>

    <author>
      <first-name>Herman</first-name>
      <last-name>Melville</last-name>
    </author>
    <price>11.99</price>
  </sp:book>
  <book genre="philosophy" publicationdate="1991" ISBN="1-861001-57-6">
    <title>The Gorgias</title>
    <author>
      <name>Plato</name>
    </author>
    <price>9.99</price>
  </book>
</bookstore>

如用之前代码:

XmlDocument xmldoc = new XmlDocument();

xmldoc.Load(@"Books.xml");

XmlNodeList nodelist = xml.SelectNodes("/bookstore/book");

nodelist返回的值永远是null,原因是:如果XPath表达式没有加前缀(如a:b中前缀是a),那么所查询节点(注意属性也可以是节点)的命名空间URI就应该是空值(也是默认值),否则XPath不会返回结果。

现在要想获取到节点,则需要添加命名空间,具体代码如下:

go 复制代码
  XmlDocument xmldoc = new XmlDocument();
        xmldoc.Load(@"Books.xml");
        XmlNamespaceManager xmlns = new XmlNamespaceManager(xmldoc.NameTable);
        xmlns.AddNamespace("sd", "http://example.books.com");//默认的命名空间也要添加 前缀
        xmlns.AddNamespace("sp",   "http://example.book.com");
        XmlNodeList nodelist = xmldoc.SelectNodes("/sd:bookstore/sp:book", xmlns);

分析:

xmlDocument.SelectNodes("a:Root/a:News/a:New",命名空间管理) 命名空间管理需要绑定 xmlDocument.NameTable

NameTable是一个链表结构 存储唯一的属性(包含前缀)和元素(包含前缀)名字

如果不使用xPath来取值,使用XmlNodeList nodelist = xmldoc.GetElementsByTagName("New"); 也可以取到值。

相关推荐
CS Beginner8 小时前
【JavaWeb学习】myabtis.xml一次性加载mapper相关的文件
xml·学习
C嘎嘎嵌入式开发8 小时前
(21)100天python从入门到拿捏《XML 数据解析》
xml·开发语言·python
BTU_YC8 小时前
DrawIO PPT模板自动生成指南:从文字排版到XML输出的完整工作流
xml·draw.io
源力祁老师1 天前
ODOO数据文件(XML、CSV、SQL)是如何转换并加载到 Odoo 数据库
xml·数据库·sql
爱吃土豆的马铃薯ㅤㅤㅤㅤㅤㅤㅤㅤㅤ2 天前
mapper.xml sql动态表查询配置
xml·java·sql
l1t3 天前
DeepSeek辅助利用搬移底层xml实现快速编辑xlsx文件的python程序
xml·开发语言·python·xlsx
ss2734 天前
手写Spring第4弹: Spring框架进化论:15年技术变迁:从XML配置到响应式编程的演进之路
xml·java·开发语言·后端·spring
Lucky_Turtle5 天前
【Java Xml】dom4j写入XML
xml·java·python
莫陌尛.5 天前
xml方式bean的配置---实例化bean的方式
xml
六元七角八分7 天前
pom.xml
xml·数据库