• XmlDocument.SelectNodes 不起作用


    今天采用Xpath读取Xml节点,怎么都读不出。

    问题分析:

    错误代码如下:

          XmlDocument xmlD = new XmlDocument();
          xmlD.PreserveWhitespace = true;
          xmlD.LoadXml(xStr);
          xmlD.SelectNodes(@"job-scheduling-data/schedule/job");
    
    • 1
    • 2
    • 3
    • 4

    经排查 dotnet 文档,发现代码编写没有问题。文档描述如下:
    在这里插入图片描述

    文档示例如下:
    示例代码:

    using System;
    using System.IO;
    using System.Xml;
    
    public class Sample
    {
      public static void Main()
      {
    
          XmlDocument doc = new XmlDocument();
          doc.Load("booksort.xml");
    
          //Create an XmlNamespaceManager for resolving namespaces.
          XmlNamespaceManager nsmgr = new XmlNamespaceManager(doc.NameTable);
          nsmgr.AddNamespace("bk", "urn:samples");
    
          //Select and display the value of all the ISBN attributes.
          XmlNodeList nodeList;
          XmlElement root = doc.DocumentElement;
          nodeList = root.SelectNodes("/bookstore/book/@bk:ISBN", nsmgr);
          foreach (XmlNode isbn in nodeList){
            Console.WriteLine(isbn.Value);
          }
       }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25

    示例XML

    
    
    <bookstore xmlns:bk="urn:samples">
      <book genre="novel" publicationdate="1997" bk:ISBN="1-861001-57-8">
        <title>Pride And Prejudicetitle>
        <author>
          <first-name>Janefirst-name>
          <last-name>Austenlast-name>
        author>
        <price>24.95price>
      book>
      <book genre="novel" publicationdate="1992" bk:ISBN="1-861002-30-1">
        <title>The Handmaid's Taletitle>
        <author>
          <first-name>Margaretfirst-name>
          <last-name>Atwoodlast-name>
        author>
        <price>29.95price>
      book>
      <book genre="novel" publicationdate="1991" bk:ISBN="1-861001-57-6">
        <title>Emmatitle>
        <author>
          <first-name>Janefirst-name>
          <last-name>Austenlast-name>
        author>
        <price>19.95price>
      book>
      <book genre="novel" publicationdate="1982" bk:ISBN="1-861001-45-3">
        <title>Sense and Sensibilitytitle>
        <author>
          <first-name>Janefirst-name>
          <last-name>Austenlast-name>
        author>
        <price>19.95price>
      book>
    bookstore>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36

    自己程序采用Xml:
    在这里插入图片描述

    结论:问题原因:最后用文档示例与自己代码比较发现上命名空间导致**

    修改后正确代码

         string xStr = File.ReadAllText(path.Trim());
                    xStr = xStr.Replace("", "");
                    xStr = xStr.Replace("xmlns=\"http://quartznet.sourceforge.net/JobSchedulingData\"", "");
                    xStr = xStr.Replace("xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\"", "");
                    XmlDocument xmlD = new XmlDocument();
                    xmlD.PreserveWhitespace = true;
                    xmlD.LoadXml(xStr);
                    XmlNodeList jobNodeList = xmlD.SelectNodes(@"job-scheduling-data/schedule/job");
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
  • 相关阅读:
    虚拟机Centos7 clone 模拟多服务器 nacos集群部署,以及踩坑
    远程调用,参数压缩问题
    Golang——从入门到放弃
    斜率优化DP
    并发之固定运行和交替运行方案
    Vue2 零基础入门 Vue2 零基础入门第二天 2.1 vue简介 && 2.2 vue的基本使用 && 2.3 vue的调试工具
    全国机动车达4.3亿辆 驾驶人达5.2亿人 新能源汽车保有量达1821万辆
    C语言 求两个正整数的最大公约数及最小公倍数
    聚类测试_31省市居民家庭消费水平
    运行disco项目报错及解决
  • 原文地址:https://blog.csdn.net/weixin_46681279/article/details/132583579