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. IE的if条件判断

    我们经常需要编写兼容代码,特别是万恶的IE. 特此记录下IE提供的if判断: <!--[if IE 5]> 仅IE5.0与IE5.5可以识别 <![endif]--> < ...

  2. vue做的简单购物车

    <code><!DOCTYPE html><html><head lang="en"> <meta charset=" ...

  3. ASP.Net 之委托事件

    1.首先给一张图让大家了解什么是委托?它的优缺点是什么? 2.通过代码的运用更深入地了解委托事件(窗体应用程序) 1)下面我们先定义一个无参数的委托. //1.0 定义一个自定义的委托,此委托的签名是 ...

  4. [Linux]C语言Linux系统编程创建进程

    1.进程ID 每一个进程都由一个唯一的标识符表示,即进程ID,简称pid.系统保证在某时刻每个pid都是唯一的. 1.1分配进程ID 缺省情况下,内核将进程ID的最大值限制为32768,可以在此处设置 ...

  5. 一、JDBC基础示例

    一.简介 JDBC全称叫做Java database connectivity,直译为Java语言的数据库连接.它主要针对于支持结构化查询语言(SQL)的数据源,与Java程序连接并操作数据. JDB ...

  6. apache Header set Cache-Control

    设置静态页面的缓存最大值 在.htaccess中添加下面的代码 <FilesMatch "\.(flv|gif|jpg|jpeg|png|ico|swf)$"> Hea ...

  7. Ubuntu重启网卡的三种方法

    一.network利用root帐户# service network restart 或者/etc/init.d/networking restart 二.ifdown/ifup# ifdown et ...

  8. Visual studio 2013打开报异常"Exception has been thrown by the target of an invocation"

    最近遇到一个问题,打开VS2013和SQL Server2014都会出报错,错误信息如下: 以前都是好好的,重启了机子也不行,能打开两个VS,再打开第三个VS还是会报错,百度无果,还是在google上 ...

  9. git杂记-分支简介

    分支创建 //只创建分支不切换: $ git branch testing //创建并切换分支$ git checkout -b iss53 查看各个分支的指向对象 $ git log --oneli ...

  10. 关于 img 父容器比img图片要多4个像素的问题

    问题背景: <div> <img src="" /> </div> 图片和div 的宽度相同,div的高度等于图片的高度 结果发现div的高度 ...