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

现有 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>

tang_0.png 需要取得 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 节点

tang_0.png 需要取得 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()" );

tang_26.png 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 属性

转载于:https://www.cnblogs.com/wequst/archive/2009/01/08/1371769.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值