C#导航器Xpath与XPathNavigator类

 更新时间:2022年06月07日 08:20:04   作者:springsnow  
这篇文章介绍了C#导航器Xpath与XPathNavigator类,文中通过示例代码介绍的非常详细。对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下

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

一、创建:CreateNavigator

1、XPathNavigator类,如果是从XPathDocument中创建,则是只读的,只能浏览数据;

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

2、XPathNavigator类,如果是从XmlDocument中创建,则可以编辑文档;

XmlDocument doc = new XmlDocument(); 
doc.Load("./books.xml"); 
XPathNavigator nav2 = doc.CreateNavigator();

二、读取:Select()

  • 使用Select()方法通过XPath语句查询,得到XPathNodeIterator对象;
  • 遍历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

使用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("5");
    }
}
doc.Save("./newBooks.xml");

五、转换XmlReader ,XmlWriter

通过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();

到此这篇关于C#导航器Xpath与XPathNavigator类的文章就介绍到这了。希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

相关文章

  • picturebox加载图片的三种方法与网站验证码的抓取

    picturebox加载图片的三种方法与网站验证码的抓取

    这篇文章主要介绍了picturebox加载图片的三种方法与网站验证码的抓取,需要的朋友可以参考下
    2015-03-03
  • 深入浅析Restful接口的两种使用方式

    深入浅析Restful接口的两种使用方式

    restful接口常用的两种方式是get和post.接下来通过本文给大家介绍Restful接口的两种使用方式,本文给大家介绍的非常详细,需要的朋友参考下吧
    2018-09-09
  • C#微信开发之接收 / 返回文本消息

    C#微信开发之接收 / 返回文本消息

    本文主要介绍了C#微信开发之接收 / 返回文本消息原理与实现方法,具有一定的参考价值,下面跟着小编一起来看下吧
    2017-02-02
  • C# 添加Word文本和图片超链接的方法

    C# 添加Word文本和图片超链接的方法

    本文给大家介绍如何用C#编程语言对Word文档中的文本和图片进行超链接设置。感兴趣的朋友一起看看吧
    2017-10-10
  • C# 中使用 Exceptionless的方法

    C# 中使用 Exceptionless的方法

    这篇文章主要介绍了C# 中使用 Exceptionless的方法,帮助大家更好的理解和使用c#,感兴趣的朋友可以了解下
    2020-12-12
  • 关于C#结构体 你需要知道的

    关于C#结构体 你需要知道的

    这篇文章主要介绍了关于C#结构体的相关知识,以及使用方法,文中代码非常详细,帮助大家更好的参考和学习,感兴趣的朋友可以了解下
    2020-06-06
  • dotnet如何将文件删除到回收站

    dotnet如何将文件删除到回收站

    这篇文章主要给大家介绍了关于dotnet如何将文件删除到回收站的相关资料,文中通过示例代码介绍的非常详细,对大家学习或者使用dotnet具有一定的参考学习价值,需要的朋友们下面来一起学习学习吧
    2019-03-03
  • C# .net实现货币转换示例

    C# .net实现货币转换示例

    这篇文章主要介绍了C# .net实现货币转换,其中包含了try catch、switch语句的运用,对于C#初学者有一定的借鉴价值,需要的朋友可以参考下
    2014-08-08
  • C# Newtonsoft.Json 解析多嵌套json 进行反序列化的实例

    C# Newtonsoft.Json 解析多嵌套json 进行反序列化的实例

    这篇文章主要介绍了C# Newtonsoft.Json 解析多嵌套json 进行反序列化的实例,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2021-01-01
  • C# 语言入门基础介绍

    C# 语言入门基础介绍

    这篇文章主要介绍了C# 语言入门基础,c#是一种新式编程语言,不仅面向对象,还类型安全,本教程概述了 C# 8 及更高版本中该语言的主要组件。 下面一起进入文章了解更多的详细内容吧
    2021-12-12

最新评论