zoukankan      html  css  js  c++  java
  • 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: ews.xml");
    XmlNodeList nodelist = xml.SelectNodes("//Root/News"); 
    nodelist返回的值永远是null,原因是:如果XPath表达式没有加前缀(如a:b中前缀是a),那么所查询节点(注意属性也可以是节点)的命名空间URI就应该是空值(也是默认值),否则XPath不会返回结果。

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

    XmlDocument xmldoc = new XmlDocument();
    xmldoc.Load(@"D: ews.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:TestTestxx.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;
    }

  • 相关阅读:
    Delphi中Chrome Chromium、Cef3学习笔记(五)
    java ->IO流_File类
    java ->递归
    java-> 分包分层
    java ->JDBC
    java -> 异常类与自定义异常
    java ->斗地主洗牌
    java -> map接口
    java ->Set接口
    java -> List接口
  • 原文地址:https://www.cnblogs.com/amylis_chen/p/3218074.html
Copyright © 2011-2022 走看看