XML文件操作下之XPath

来源:互联网 发布:苹果尤克里里调音软件 编辑:程序博客网 时间:2024/06/06 07:06

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属性

转帖:http://www.cnblogs.com/LouisZhu/
原创粉丝点击