以下xml:

<Project>
<ProjectMains>
<ProjectMain Action="added">
<ProjectID>AQZNSJC</ProjectID>
<ProjectName>testproject</ProjectName>
<BeginDate>2012/6/1 0:00:00</BeginDate>
<EndDate>2020/6/1 0:00:00</EndDate>
<LedgerID>1002</LedgerID>
<InUsed>True</InUsed>
</ProjectMain>
</ProjectMains>
</Project>

不带namespace的读取,直接用XPath方式即可:

            XmlDocument doc = new XmlDocument();
var xml = TextBox1.Text.Trim();
doc.LoadXml("<load>" + xml + "</load>");
XmlNodeList ProList = doc.SelectNodes("//ProjectMains");
foreach (XmlNode node in ProList)
{
string ProjectID = node.SelectSingleNode("./ProjectMain/ProjectID").InnerText;
}
换成这样的<ProjectMains xmlns="http://someplace.org">,直接XPath方式就不行了,要AddNamespace后再带前缀去取:
       XmlNamespaceManager nsmgr = new XmlNamespaceManager(doc.NameTable);
nsmgr.AddNamespace("ab", "http://someplace.org");
XmlNodeList ProList = doc.SelectNodes("//ab:ProjectMains",nsmgr);
foreach (XmlNode node in ProList)
{
string ProjectID = node.SelectSingleNode("//ab:ProjectMain/ab:ProjectID", nsmgr).InnerText;
}

RemoveNamespace后再去取似乎没什么效果:

nsmgr.RemoveNamespace("ProjectMains", "http://someplace.org");

最后碰到这个再多一层的情况,其实用AddNamespace去取就行了:

<Project xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<ProjectMains xmlns="http://someplace.org">
<ProjectMain Action="added">
<ProjectID>AQZNSJC</ProjectID>
<ProjectName>testproject</ProjectName>
<BeginDate>2012/6/1 0:00:00</BeginDate>
<EndDate>2020/6/1 0:00:00</EndDate>
<BuildBeginDate>2015/11/2 16:41:00</BuildBeginDate>
<BgnSaleDate>2015/11/2 16:41:00</BgnSaleDate>
<BuildEndDate>2015/11/2 16:41:00</BuildEndDate>
<EndSaleDate>2015/11/2 16:41:00</EndSaleDate>
<Principaler>pp</Principaler>
<ProjStatus />
<OwnerCompanyID>F</OwnerCompanyID>
<CityID>320684</CityID>
<LedgerID>1002</LedgerID>
<InUsed>True</InUsed>
</ProjectMain>
</ProjectMains>
</Project>
<requestPubProfile xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<requestInfo xmlns="http://someplace.org">
<requestID>000001</requestID>
<correlationID />
<version>1</version>
</requestInfo>
</requestPubProfile>
<batchType xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<batchInfo xmlns="http://someplace.org">
<dataName>ProjectInfo</dataName>
<dataCount>1</dataCount>
</batchInfo>
</batchType>

或者实在不想处理这个前缀,那就直接取Tag吧:

XmlNodeList projMainNodes = doc.GetElementsByTagName("ProjectMain");
for (var i = ; i < projMainNodes.Count; i++)
{
XmlElement groupElement = (XmlElement)projMainNodes.Item(i);// 转化成节点
var bus = groupElement.GetElementsByTagName("ProjectID").Count > ? groupElement.GetElementsByTagName("ProjectID")[].InnerText
                                         : string.Empty;
}

或者替换掉:

xml = xml.Replace("xmlns=", "xmlns:xsi=");
doc.LoadXml("<load>" + xml + "</load>");
XmlNodeList ProList = doc.SelectNodes("//ProjectMains");

C# xml读取操作的更多相关文章

  1. Qt XML读取写入操作

    XML(eXtensible Markup Language,可扩展标记语言)是普通用于数据交换和数据存储的一种多用途文本文件格式: SVG(可标量矢量图形)XML格式,QtSvg模块提供了可用于载入 ...

  2. Xml通用操作类

    using System; using System.Collections.Generic; using System.IO; using System.Text; using System.Xml ...

  3. C# XML流操作简单实例

    这里我们先介绍操作XML文件的两个对象:XmlTextReader和XmlTextWriter打开和读取Xml文件使用到的对象就是XmlTextReader对象.下面的例子打开了与程序在同一路径下的一 ...

  4. 我来讲讲在c#中怎么进行xml文件操作吧,主要是讲解增删改查!

    我把我写的四种方法代码贴上来吧,照着写没啥问题. 注: <bookstore> <book> <Id>1</Id> <tate>2010-1 ...

  5. Python实现XML的操作

    本文从以下两个方面, 用Python实现XML的操作: 一. minidom写入XML示例1 二. minidom写入XML示例2 三. ElementTree写入/修改示例 四. ElementTr ...

  6. C# XML文件操作

    C# XML文件操作 运行环境:Window7 64bit,.NetFramework4.61,C# 6.0: 编者:乌龙哈里 2017-02-09 参考 LINQ to XML System.Xml ...

  7. Android设备与外接U盘实现数据读取操作

    现在越来越多手机支持OTG功能,通过OTG可以实现与外接入的U盘等USB设备实现数据传输.关于OTG,可以参考: http://blog.csdn.net/srw11/article/details/ ...

  8. VS2012 Unit Test —— 我对IdleTest库动的大手术以及对Xml相关操作进行测试的方式

    [1]我的IdleTest源码地址:http://idletest.codeplex.com/ [2]IdleTest改动说明:2013年10月份在保持原有功能的情况下对其动了较大的手术,首先将基本的 ...

  9. sql server中对xml进行操作

    一.前言 SQL Server 2005 引入了一种称为 XML 的本机数据类型.用户可以创建这样的表,它在关系列之外还有一个或多个 XML 类型的列:此外,还允许带有变量和参数.为了更好地支持 XM ...

随机推荐

  1. 了解Binder机制原理和底层实现

    参考:http://www.2cto.com/kf/201606/515548.html 1.Binder通信机制介绍 这篇文章会先对比Binder机制与Linux的通信机制的差别,了解为什么Andr ...

  2. JSON Web Token的使用

    定义 JSON Web Token(JWT)是一个非常轻巧的规范.这个规范允许我们使用JWT在用户和服务器之间传递安全可靠的信息. 适用场景 1.用于向Web应用传递一些非敏感信息.例如完成加好友.下 ...

  3. Codeforces 158 B. Taxi[贪心/模拟/一辆车最多可以坐4人同一个群的小朋友必须坐同一辆车问最少需要多少辆车]

    http://codeforces.com/problemset/problem/158/B B. Taxi time limit per test 3 seconds memory limit pe ...

  4. 使用企业微信的API给指定用户发送消息

    上个月比较忙,等不忙了继续写点基础教程(五一还在高铁上写项目在).因为公司的原因,自己学习了点JavaWeb的知识,重新写了一个简单的后台管理,用于记录用户注册信息的.其中有这样的一个要求,就是在用户 ...

  5. Unix/Linux提权漏洞快速检测工具unix-privesc-check

    Unix/Linux提权漏洞快速检测工具unix-privesc-check   unix-privesc-check是Kali Linux自带的一款提权漏洞检测工具.它是一个Shell文件,可以检测 ...

  6. Delphi中@,^,#,$分别表示什么?

    @:取址运算符; var int:integer; p:^integer; new(P); int:=24; p:=@int; dispose(P); ^:指针的引用解析操作符; var pint:^ ...

  7. Excel找出两列相同部分

    公式:=IF(COUNTIF($B$2:$B$1036,A6)>0,A2,"") 含义:从B列第2行到b列1036行中和A列第6个相等的返回A6的值,不相等返回空 用法:新建 ...

  8. Android JNI&NDK编程小结及建议

    前言 由于网上关于JNI/NDK相关的知识点介绍的比较零散而且不具备参照性,所以写了这篇JNI/NDK笔记,便于作为随时查阅的工具类型的文章,本文主要的介绍了在平时项目中常用的命令.JNI数据类型.签 ...

  9. Android 两种注册、发送广播的区别

    前言:前面文章记录了Service的使用,这次来记录另一个四个组件之一的BroadcastReceiver.主要介绍两种发送和注册广播的区别. BroadcastReceiver广播接收者用于接收系统 ...

  10. Android requestLayout 和 invalidata , postInvalidate 比较

    Android 中的View更新方法 invalidate 在UI线程中使用. postInvalidate 在非UI线程中通知重绘. View 确定自身已经不适合现有区域时,调用requestLay ...