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 阅读(777) 评论(0) 编辑 收藏 举报