XML文件操作下之XPath

    技术2026-04-04  1

    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/
    最新回复(0)