海纳百川

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

导航