XML文件操作下之XPath
XPath操作XML文件的很方便和灵活。
下面介绍一些比较常用的XPath语法
<?xml version="1.0" encoding="utf-8"?>
<BookList>
<Book Name="我的二战回忆录" Author="丘吉尔" Price ="135">
<Chapter Index="Chapter1" Title="胜利者的蠢事" />
<Chapter Index="Chapter2" Title="和平的鼎盛时期" />
<Chapter Index="Chapter3" Title="潜伏的危险" />
<Chapter Index="Chapter4" Title="阿道夫.希特勒" />
</Book>
<Book Name="泰戈尔诗集" Author="泰戈尔" Price ="20">
<Chapter Index="Chapter1" Title="园丁集" />
<Chapter Index="Chapter2" Title="飞鸟集" />
</Book>
</BookList>
1.选取节点
| 路径表达式 | 结果 |
| BookList | 选取根元素 bookList 所有子节点 |
| /BookList | 选取根元素 bookList,注释:假如路径起始于正斜杠( / ),则此路径始终代表到某元素的绝对路径! |
| //Book | 选取所有 book 子元素,而不管它们在文档中的位置。 |
| BookList//Book | 选择所有属于 bookstore 元素的后代的 book 元素,而不管它们位于 bookstore 之下的什么位置。 |
| //@Title | 选取所有名为 Title 的属性。 |
代码如下:
/// <summary>
/// 读取节点
/// </summary>
/// <param name="xmlFile"></param>
private void ReadXmlNode(string xmlFile)
{
XmlDocument xmlDoc = new XmlDocument();
xmlDoc.Load(xmlFile);
XmlNode blnode = xmlDoc.SelectSingleNode("BookList");
XmlNode blnode1 = xmlDoc.SelectSingleNode("/BookList");
XmlNode bookNode = xmlDoc.SelectSingleNode("BookList/Book");
XmlNode titleAttr = xmlDoc.SelectSingleNode("//@Title");
}
2.谓语的使用
| 路径表达式 | 结果 |
| /BookList/Book[1] | 选取BookList下第一个Book节点 |
| /BookList/Book[last()] | 选取BookList下最后一个Book节点 |
| /BookList/Book[last()-1] | 选取BookList下倒数第二个Book节点 |
| /BookList/Book[position()<3] | 选取最前面的两个属于BookList 节点的子元素的 Book 节点 |
| //Book[@Name] | 选取拥有Name属性的Book节点 |
| //Book[@Name = 'book1'] | 选取Name属性是‘book1’的Book节点 |
| //Book[@Price>100] | 选取Price价格大于100的Book节点 |
| //Book[@Price>100]/Chapter | 选取Price价格大于100的Book下的Chapter元素 |
3.通配符的使用
| 通配符 | 描述 | 路径表达式 | 结果 |
| “*” | 匹配任何元素节点 | BookList/* | 返回BookList的所有子节点 |
| “@*” | 匹配任何属性 | //@* | 返回所有的属性 |
| node() | 匹配任何节点 | BookList/node() | 返回BookList的所有子节点 |
4.选取多个路径
| 路径表达式 | 结果 |
| //@Title | //@Index | //@Author | 选取所有的Title属性,Author属性和Index属性 |
| //Book | //Chapter | 选取所有的Book节点和Chapter节点 |
5.XPath轴
| 路径表达式 | 结果 |
| child::Chapter | 获取当前节点的Chapter子节点 |
| attribute::Name | 获取当前节点的Name属性 |
posted on 2010-07-06 22:41 These days 阅读(789) 评论(0) 收藏 举报
浙公网安备 33010602011771号