之前文章讲述了使用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;
}

C#操作XML(带命名空间)的更多相关文章

  1. Linq to Xml读取复杂xml(带命名空间)

    前言:xml的操作方式有多种,但要论使用频繁程度,博主用得最多的还是Linq to xml的方式,觉得它使用起来很方便,就用那么几个方法就能完成简单xml的读写.之前做的一个项目有一个很变态的需求:C ...

  2. 由“Jasperrpeorts 4.1.2升级到5.1.2对flex项目的解析”到AS3 带命名空间的XML的操作

    原文同步至:http://www.waylau.com/from-jasperrpeorts-4-1-2-upgraded-to-5-1-2-parsing-of-flex-projects-to-t ...

  3. Linq解析带命名空间、前缀、Soap格式的XML

    关于XML,经常会用到,XML有一般的,同样也有二般的,更不要觉得会操作基础的XML就觉得自己已经精通XML操作,文中是对解析XML的方法进行介绍 1. 一般XML <?xml version= ...

  4. 带命名空间的XML的dom4j应用<转>

    Element root = document.getRootElement();     List   recordenvlist = document.selectNodes("//gm ...

  5. C#读取带命名空间的xml,xaml文件的解决方案

    使用C#读取xml文件有三种常用的方式: 1.xmlDocument 2.XmlTextReader 3.Linq To Xml 但是这些方式在读写有些带命名空间的xml时就不知道怎么办了(例如把xa ...

  6. dom4j解析带命名空间的xml文件

    文件内容如下 <ArrayOfString xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd=& ...

  7. 实现动态的XML文件读写操作(依然带干货)

    前言 最近由于项目需求,需要读写操作XML文件,并且存储的XML文件格式会随着导入的数据不同而随时改变(当然导入的数据还是有一定约束的),这样我们要预先定义好XML文件的格式就不太现实了,如何实现不管 ...

  8. VBA中操作XML

    OFFICE2007之后使用了OpenXml标准(伟大的改变),定制文本级的Ribbon可以通过修改压缩包内的xml文件来实现. 先学习一下VBA中操作XML的方法 先引用Microsoft XML ...

  9. SQL Server 操作XML数据

    .xml.exist 输入为XQuery表达式,返回0,1或是Null.0表示不存在,1表示存在,Null表示输入为空 .xml.value 输入为XQuery表达式,返回一个SQL Server标量 ...

随机推荐

  1. 【JSON】JSON字符串的操作(不断积累中)

    一.JS遍历JSON串 示例01 目标:返回的JSON串中,一个Key对应的Value是一个数组(若在Java程序中,是一个List). 现在要求获取每个数组中的第一个对象元素中的name属性的值. ...

  2. Codeforces Round #367 (Div. 2) D. Vasiliy's Multiset (0/1-Trie树)

    Vasiliy's Multiset 题目链接: http://codeforces.com/contest/706/problem/D Description Author has gone out ...

  3. vim之pydiction插件

    [vim之pydiction插件] It consists of three main files: python_pydiction.vim -- Vim plugin. complete-dict ...

  4. 应用apache FileUtils把网页另存为文件

    public static void foo() { try { URL url = new URL("http://www.webservicex.net/globalweather.as ...

  5. mysql编码详解

    在开发程序的时候,我们使用mysql数据库开发的时候,有时会碰到自己明明输入的是中文,为什么数据库中存储的就是???? 1.在配置Connection URL时,加上?useUnicode=true& ...

  6. Codeforces 687C. The Values You Can Make (dp)

    题目链接:http://codeforces.com/problemset/problem/687/C 题目大概说给n个各有价值的硬币,要从它们中选出若干个组合成面值k,而要求的是各个方案里这些选出的 ...

  7. MFC下的各种字符串类型和相互转换

    MFC下的常用字符串数据类型表示的含义: L:Long  长 P:Point  指针 C:Const  常量 W:Wchar_t  宽字符 T:TCHAR  STR:String  字符串 在看看MF ...

  8. hdoj 5373 The shortest problem

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5373 一开始想到用整除11的性质去做,即奇位数的和和偶位数的和的差为11的倍数,但估不准数据范围没敢去 ...

  9. UserControl和CustomControl基础【PluraSight】

    UserControl UserControl实际上就是ContentControl,xaml里<UserControl></UserControl>tag之间包含的实际就是后 ...

  10. android 简易时间轴(实质是ListView)

    ListView的应用 1.在很多时候是要用到时间轴的,有些处理的时间轴比较复杂,这里就给出一个比较简单的时间轴,其实就是ListView里面的Item的设计. 直接上代码: ListView,ite ...