XPathNavigator类包含移动和选择XML所需元素的所有方法。

一、创建:

a.如果是从XPathDocument中创建,则是只读的,只能浏览数据;
  b.如果是从XmlDocument中创建,则可以编辑文档;

XPathDocument doc = new XPathDocument("./books.xml");
XPathNavigator nav = ((IXPathNavigable)doc).CreateNavigator();

二、读取

使用Select()方法通过XPath语句查询;
使用XPathNodeIterator类,MoveNext()方法移动下一个节点;Current属性表示当前节点;

//查询bookstore的子元素book中genre属性值为novel的所有节点
XPathNodeIterator iter = nav.Select("/bookstore/book[@genre='novel']");
while (iter.MoveNext())
{
    //迭代所有子代节点
    XPathNodeIterator newIter = iter.Current.SelectDescendants(XPathNodeType.Element, false);
    while (newIter.MoveNext())
    {
        Console.WriteLine(newIter.Current.Name + " : " + newIter.Current.Value);
    }
}

三、计算

使用Evaluate()方法计算表达式的值;

//统计图书总价
Console.WriteLine("Total price = {0}", nav.Evaluate("sum(bookstore/book/price)"));

四、编辑:

插入节点:先检查CanEdit属性是否为true,再使用InsertAfter()方法插入新节点。

XmlDocument doc = new XmlDocument();
doc.Load("./books.xml");
XPathNavigator nav2 = doc.CreateNavigator();
//判断是否可编辑
if (nav2.CanEdit)
{
    XPathNodeIterator iter = nav2.Select("bookstore/book/price");
    while (iter.MoveNext())
    {
        //在当前节点之后插入新节点
        iter.Current.InsertAfter("<disc>5</disc>");
    }
}
doc.Save("./newBooks.xml");

五、通过XPathNavigator转换为XMLReader,XMLWriter读写数据

//读:
XmlReader reader=nav.ReadSubtree();
while(reader.Read())
{Console.Write(reader.ReadOuterXml());}

//写:
XmlWriter writer=XmlWriter.Create("./1.xml");
nav.WriteSubtree(writer);
writer.Close();

35、XpathNavigator Xpath导航器 System.Xml.XPath;的更多相关文章

  1. WP8 中使用HTML Agility Pack与友盟分享SDK遇到的 System.Xml.XPath加载问题

    今晚在尝试使用友盟最新的社交分享SDK时,按照官方Demo,并未做多少多少改动,就是去除了对微信.脸书和推特的分享.然后运行之后就一直报错 : {System.IO.FileLoadException ...

  2. XSLT可扩展样式表语言转换 System.Xml.Xsl、XslCompiledTransform类

    XML文件 books.xml: <?xml version="1.0" encoding="utf-8" ?> <bookstore> ...

  3. Dom4j使用Xpath语法读取xml节点

    我们可以使用Xpath的语法来轻易的读取xml的某个节点[类似于jQuery的选择器]: 使用Xpath语法需要添加新的jaxen-1.1-beta-7.rar 这个jar包 dom4j完整jar包我 ...

  4. JavaEE XML XPath

    JavaEE XML XPath @author ixenos XPath技术 1 引入 问题:当使用dom4j查询比较深的层次结构的节点(标签,属性,文本),比较麻烦!!!需要遍历DOM树的众多节点 ...

  5. 使用XPath对象解析xml文件

    使用XPath对象解析xml文件 1.DocumentBuilderFactory类  工厂API,使应用程序能从XML文档获取生成DOM对象树的解析器 其构造方法受保护,用newInstance() ...

  6. 用DOM解析XML ,用xpath快速查询XML节点

    XPath是一种快速查询xml节点和属性的一种语言,Xpath和xml的关系就像是sql语句和数据库的关系.用sql语句可以从数据库中快速查询出东西同样的用xPath也可以快速的从xml中查询出东西. ...

  7. PowerShell技巧:使用XPath语法查询XML文件

    [TechTarget中国原创] XML是存储结构化数据的一个很好的途径,但是想要让数据在其中发挥作用又会有些困难.每一种语言都有其特定方式来查询XML文件中的命名空间.元素及属性.PowerShel ...

  8. java中的xpath,读取xml文档。

    1,入门 XPath即为XML路径语言(XML Path Language),它是一种用来确定XML文档中某部分位置的语言. XPath基于XML的树状结构,提供在数据结构树中找寻节点的能力.起初 X ...

  9. XML & XPath & XQuery

    XML & XPath & XQuery full XPath demo https://www.w3.org/TR/xpath-full-text-30/ https://www.w ...

随机推荐

  1. Uboot流程分析

    1. uboot的配置分析 1).配置入口分析 首先分析配置: 从make mx6dl_sabresd_android_config可知配置项,搜索Makefile: mx6solo_sabresd_ ...

  2. 仿58同城UITableViewCell动画

    之前看58同城APP有一个页面中Cell依次从右向左移动,今天试着做了下. 在做的过程中也遇到了几个小的问题,也算是注意点吧. 1.Cell出现时每个Cell的动画时间一样,导致没有依次移动的效果. ...

  3. hadoop学习笔记(一):hadoop生态系统及简介

    一.hadoop1.x的生态系统 HBase:实时分布式数据库 相当于关系型数据库,数据放在文件中,文件就放在HDFS中.因此HBase是基于HDFS的关系型数据库.实时性:延迟非常低,实时性高. 举 ...

  4. var、let、const的区别,以及作用范围。

    在es5中一般经常使用的变量有两个级别,一个是用var声明的全局级别的变量,另外一个是函数级别是用var生命在函数内的.本文中将详细讲解我对es6中的const和let的区别. let的使用以及作用范 ...

  5. .NET中的集合-ArrayList1

    集合命名空间: using.System.Collections;(非泛型集合) using.System.Collections.Genneric(泛型集合) 常用的集合 1.“类似数组”集合:Ar ...

  6. 删除Panl控件中窗体的方法

    //删除窗体方法 private void CloseFrm() { foreach (Control item in panel1.Controls) { if (item is Form) //判 ...

  7. C# List用Lambda表达式排序

    降序: lstroot.Sort((x,y)=>y.static_count.CompareTo(x.static_count)); 升序: lstroot.Sort((x,y)=>x.s ...

  8. jquery datatables 学习笔记

    最近项目中用到了BootStrap做后台,在选择表格插件的时候发现了jquery datatables. 功能是很强大,但是网上的例子比较少.在经过一段时间的努力可算是搞出来了. 官网地址:http: ...

  9. sql sever 执行较大的文件脚本

    1.用管理员身份打开cmd工具 2.执行命令 osql -S  localhost -U sa -P 123456 -i D:/test.sql -S 服务器地址  本地可简写 . -U 用户名 -P ...

  10. 七、curator recipes之阻塞队列SimpleDistributedQueue

    简介 Java在单机环境实现了BlockQueue阻塞队列,与之类似的curator实现了分布式场景下的阻塞队列,SimpleDistributedQueue 官方文档:http://curator. ...