• 【原创】C#操作XML(带命名空间)


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

    XML文件如下:

    <?xml version="1.0" encoding="UTF-8"?>
    <Root xmlns="http://www.52taiqiu.com">
    <News count="26">
    <New id="4033" date="2012-02-26">
    <Title>无锡精英赛正式升级为斯诺克排名赛</Title>
    <Url>http://www.52taiqiu.com/news/2012/2/4033.html</Url>
    </New>
    <New  id="4013" date="2012-02-20">
    <Title>组图:威尔士赛丁俊晖击败塞尔比夺冠</Title>
    <Url>http://www.52taiqiu.com/news/2012/2/4013.html</Url>
    </New>
    </News>
    </Root> 

    如用之前代码:

    XmlDocument xmldoc = new XmlDocument();
    xmldoc.Load(@"D:\news.xml");
    XmlNodeList nodelist = xml.SelectNodes("//Root/News"); 
    nodelist返回的值永远是null,原因是:如果XPath表达式没有加前缀(如a:b中前缀是a),那么所查询节点(注意属性也可以是节点)的命名空间URI就应该是空值(也是默认值),否则XPath不会返回结果。

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

    XmlDocument xmldoc = new XmlDocument();
    xmldoc.Load(@"D:\news.xml");
    XmlNamespaceManager xmlns = new XmlNamespaceManager(xmldoc.NameTable);
    xmlns.AddNamespace("a", "http://www.52taiqiu.com");//如有多个命名空间,添加同行类似代码
    XmlNodeList nodelist = xmldoc.SelectNodes("a:Root/a:News/a:New", xmlns); 

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

    附上完整代码:

    XmlDocument xmldoc = new XmlDocument();
    //加载xml文件
    xmldoc.Load(@"E:\Test\Test\xx.xml");
    XmlNamespaceManager xmlns = new XmlNamespaceManager(xmldoc.NameTable);
    xmlns.AddNamespace("a", "http://www.52taiqiu.com");
    XmlNodeList nodelist = xmldoc.SelectNodes("a:Root/a:News/a:New",xmlns);
    foreach (XmlNode n in nodelist)
    {
    XmlElement el = (XmlElement)n;
    string id = el.GetAttribute("id");
    string date = el.GetAttribute("date");
    string title = xmldoc.SelectSingleNode("a:Root/a:News/a:New/a:Title", xmlns).InnerText;
    string url = xmldoc.SelectSingleNode("a:Root/a:News/a:New/a:Url", xmlns).InnerText;
    }

  • 相关阅读:
    vue中使用vuepdf插件显示pdf
    vuecirclemenu漂亮的圆形菜单
    console.log输出彩色字,图片等
    项目开发之使用 maven
    用 C 扩展 python
    Flash 与 php 使用 amfphp
    纯命令行的编辑利器:用好 awk 与 sed
    远程调试Java程序
    .net core 项目文件结构浅析
    初识Redis系列之一:简单介绍
  • 原文地址:https://www.cnblogs.com/zhxhdean/p/2369451.html
Copyright © 2020-2023  润新知