首页 » C#, Xml » 阅读文章

C#操作Xml的两种方式 XPath XmlDocument XmlNodeList

2008年11月11日
现有 XML 文件,内容如下:
<?xml version="1.0" encoding="utf-8" ?>
<Company>
  <Department >
    <Name>IT Department</Name>
    <Manager>猪头三</Manager>
    <Employees>
      <Employee>
        <ID code="001" >10001</ID>
        <Name>西门庆</Name>
        <Gender></Gender>
      </Employee>
      <Employee>
        <ID code="002">10202</ID>
        <Name>潘金莲</Name>
        <Gender></Gender>
      </Employee>
    </Employees>
  </Department>
</Company>

需要取得 Name 为 “西门庆” 的 Employee 节点,用XPath实现如下:

XmlDocument xmlDoc = new XmlDocument();
xmlDoc.Load( Path.Combine( Environment.CurrentDirectory, "demo.xml" ) );
XmlNode emp = xmlDoc.SelectSingleNode( "/Company/Department/Employees/Employee[Name='西门庆']" );
//emp 即为 定位到的 Employee 节点

需要取得 code 为 002 的 Employee 节点, 用 XPath 实现如下:

XmlDocument xmlDoc = new XmlDocument();
xmlDoc.Load( Path.Combine( Environment.CurrentDirectory, "demo.xml" ) );
XmlNode emp = xmlDoc.SelectSingleNode( "/Company/Department/Employees/Employee/ID[@code='002']/parent::node()" );

XPath 寻径简介

xml文件,是一种树状结构, XPath 是针对xml文件寻径的一种 pattern。以开头的xml数据为例,下面给出几个常用的情形:

  • 取得所有的 Employee
/Company/Department/Employees/Employee

XPath的开头是一个斜线(/)代表绝对路径

  • 取得所有的 Name,不分层次
//Name

XPath 以 // 开头表示不限层次的一种模式

  • 使用 * 匹配未知名称的元素(不能匹配未知层级)

1. 取得所有的 Employee

/Company/Department/Employees/*

2. 取得Department下,包含有 Employee 作为子节点的节点

/Company/Department/*/Employee
  • 使用 [] 选择分支

XPath中的元素索引,是从 1 开始的

我们要选择 第一个 Employee

/Company/Department/Employees/Employee[1]

选择最后一个Employee

/Company/Department/Employees/Employee[last()]

选择叫西门庆的Employee

/Company/Department/Employees/Employee[Name='西门庆']
  • 多路选择

XPath 用 | 或者 Or 进行多路选择

/Company/Deparment/Manager | /Company/Deparment/Name
  • 选择属性

XPath中的属性,使用@开头

选择所有的 code 属性

//@code

和别人一起分享吧:
  • Google Bookmarks
  • QQ书签
  • 饭否
  • 校内网
  • 豆瓣九点
  • 嘀咕
  • 365Key网摘
  • POCO网摘
  • 豆瓣
  • 开心网
  • 新浪ViVi
  • 百度搜藏
  • email
  • Add to favorites
  • Facebook
  • Live
  • 收客
  • Twitter
  • del.icio.us
  • PDF
  • Yigg
  • Print
  • Digg
  • Haohao
  • RSS
  • Yahoo! Bookmarks

本文作者:三角猫 DeltaCat
文章出处:真有意思网(http://www.zu14.cn)
引用地址:点击复制本文的 Trackback Url
文章链接:http://www.zu14.cn/2008/11/11/net_xml/ [复制] (转载请注明出处及链接)

C#, Xml , , , , , ,

上一篇 »:

下一篇 »:
  1. artan
    2009年08月27日 17:15 | #1

    /Company/Department/Employees/Employee[Name='西门庆'] 是错误的,应该是
    Company/Department/Employees/Employee/Name[text()='西门庆']形式

  2. 2008年11月13日 08:08 | #2

    :emotion:

  3. 2008年11月12日 20:15 | #3

    看了楼主发的帖子,我虎躯一震,我始终按捺不住心中的喜悦,激动的心情久久不能平静,趋于灰色的人生再度因为此贴掀起了壮阔的波澜,此时此刻,此情此景,此生此世,我唯一的想法就是要回帖!!!楼主的帖子犹如暗夜中的一道闪电,劈醒了沉睡的大地,又如巴金的灯,指引黑暗中的我们,仿佛疼痛的关节喷洒了云南白药一般,其意义丝毫不亚于盘古的那一斧头。我对楼主的崇拜之情片刻不能停止。我要回帖,这个想法久久的回荡…

  1. 目前还没有任何 trackbacks 和 pingbacks.

 

Related Posts with Thumbnails