`
isiqi
  • 浏览: 16593187 次
  • 性别: Icon_minigender_1
  • 来自: 济南
社区版块
存档分类
最新评论

C#中使用XPath的XPathNavigator类移动选择XML数据

阅读更多

XPathNavigator类包含移动和选择XML所需元素的所有方法。
1.创建:
a.如果是从XPathDocument中创建,则是只读的,只能浏览数据;
b.如果是从XmlDocument中创建,则可以编辑文档;
2.查询:使用Select()方法通过XPath语句查询;
3.迭代:使用XPathNodeIterator类,MoveNext()方法移动下一个节点;Current属性表示当前节点;
4.求值:使用Evaluate()方法计算表达式的值;
5.插入节点:先检查CanEdit属性是否为true,再使用InsertAfter()方法插入新节点。

实例:查询和编辑books.xml

01. using System;
02. using System.Collections.Generic;
03. using System.Text;
04. using System.Xml.XPath;
05. using System.Xml;
06.
07. namespace Magci.Test.XML.TestXPath
08. {
09. class Program
10. {
11. private static XPathDocumentdoc;
12. private static XPathNavigatornav;
13.
14. static void Main( string []args)
15. {
16. doc= new XPathDocument(@ "..\..\books.xml" );
17. nav=((IXPathNavigable)doc).CreateNavigator();
18. SearchByGenre( "nove" );
19. TotalPrice();
20. Insert();
21. Console.ReadLine();
22. }
23.
24. public static void SearchByGenre( string search)
25. {
26. //查询bookstore的子元素book中genre属性值为novel的所有节点
27. XPathNodeIteratoriter=nav.Select( "/bookstore/book[@genre='" +search+ "l']" );
28.
29. Console.WriteLine( "\nSearchByGenre:\n" );
30. while (iter.MoveNext())
31. {
32. //迭代所有子代节点
33. XPathNodeIteratornewIter=iter.Current.SelectDescendants(XPathNodeType.Element, false );
34. while (newIter.MoveNext())
35. {
36. Console.WriteLine(newIter.Current.Name+ ":" +newIter.Current.Value);
37. }
38. }
39. }
40.
41. public static void TotalPrice()
42. {
43. XPathNodeIteratoriter=nav.Select( "/bookstore/book" );
44. Console.WriteLine( "\nTotalPrice:\n" );
45. while (iter.MoveNext())
46. {
47. XPathNodeIteratornewIter=iter.Current.SelectDescendants(XPathNodeType.Element, false );
48. while (newIter.MoveNext())
49. {
50. if (newIter.Current.Name== "price" )
51. {
52. Console.WriteLine(newIter.Current.Name+ ":" +newIter.Current.Value);
53. }
54. }
55. }
56. //统计图书总价
57. Console.WriteLine( "Totalprice={0}" ,nav.Evaluate( "sum(bookstore/book/price)" ));
58. }
59.
60. //插入节点
61. public static void Insert()
62. {
63. XmlDocumentdoc= new XmlDocument();
64. doc.Load(@ "..\..\books.xml" );
65. XPathNavigatornav2=doc.CreateNavigator();
66. //判断是否可编辑
67. if (nav2.CanEdit)
68. {
69. XPathNodeIteratoriter=nav2.Select( "bookstore/book/price" );
70. while (iter.MoveNext())
71. {
72. //在当前节点之后插入新节点
73. iter.Current.InsertAfter( "<disc>5</disc>" );
74. }
75. }
76. doc.Save(@ "..\..\newBooks.xml" );
77. Console.WriteLine( "\nnewBooks.xmlsavedsuccessful.\n" );
78. }
79. }
80. }



book.xml:


01. <? xml version = "1.0" encoding = "utf-8" ?>
02. < bookstore >
03. < book genre = "autobiography" publicationdate = "1991" ISBN = "1-861003-11-0" >
04. < title >TheAutobiographyofBenjaminFranklin</ title >
05. < author >
06. < first-name >Benjamin</ first-name >
07. < last-name >Franklin</ last-name >
08. </ author >
09. < price >8.99</ price >
10. </ book >
11. < book genre = "novel" publicationdate = "1967" ISBN = "0-201-63361-2" >
12. < title >TheConfidenceMan</ title >
13. < author >
14. < first-name >Herman</ first-name >
15. < last-name >Melville</ last-name >
16. </ author >
17. < price >11.99</ price >
18. </ book >
19. < book genre = "philosophy" publicationdate = "1991" ISBN = "1-861001-57-6" >
20. < title >TheGorgias</ title >
21. < author >
22. < name >Plato</ name >
23. </ author >
24. < price >9.99</ price >
25. </ book >
26. </ bookstore >


newBooks.xml:编辑后的文档



01. <? xml version = "1.0" encoding = "utf-8" ?>
02. < bookstore >
03. < book genre = "autobiography" publicationdate = "1991" ISBN = "1-861003-11-0" >
04. < title >TheAutobiographyofBenjaminFranklin</ title >
05. < author >
06. < first-name >Benjamin</ first-name >
07. < last-name >Franklin</ last-name >
08. </ author >
09. < price >8.99</ price >
10. < disc >5</ disc >
11. </ book >
12. < book genre = "novel" publicationdate = "1967" ISBN = "0-201-63361-2" >
13. < title >TheConfidenceMan</ title >
14. < author >
15. < first-name >Herman</ first-name >
16. < last-name >Melville</ last-name >
17. </ author >
18. < price >11.99</ price >
19. < disc >5</ disc >
20. </ book >
21. < book genre = "philosophy" publicationdate = "1991" ISBN = "1-861001-57-6" >
22. < title >TheGorgias</ title >
23. < author >
24. < name >Plato</ name >
25. </ author >
26. < price >9.99</ price >
27. < disc >5</ disc >
28. </ book >
29. </ bookstore >
分享到:
评论

相关推荐

    C# XML处理中xpath使用文档

    在C#编程中,XPath可以与`System.Xml`命名空间中的类,如`XmlNode`, `XmlDocument`, `XPathNavigator`和`XPathExpression`等结合使用,方便地检索和操作XML数据。例如,`XmlNode.SelectNodes()`方法可以接受一个...

    C#中利用XML文件保存数据

    C#中的XPathNavigator和XPathDocument类可以帮助我们使用XPath。例如,获取XML中所有"子节点1"的值: ```csharp using System.Xml.XPath; // 创建XPathNavigator对象 XPathDocument xpathDoc = new XPathDocument...

    C# 写的测试XPath 的小工具

    结合题目中的“C#写的测试XPath的小工具”,我们可以探讨如何在C#中使用XPath,以及创建这样的测试工具的基本步骤。 首先,要使用XPath在C#中处理XML文档,你需要引入System.Xml命名空间,其中包含XPathNavigator和...

    C#读取XML文件并写入数据库

    在IT行业中,XML(eXtensible Markup Language)是一种常用的数据交换格式,它结构清晰、易于解析,常用于存储和传输数据。C#是.NET框架下的主要编程语言,具有丰富的库支持,使得处理XML文件变得相当简单。当我们...

    C# 读写XML类

    在C#中,System.Xml命名空间提供了许多类来支持XML操作,其中最常用的是XmlDocument、XmlNodeReader、XPathNavigator和XmlWriter等。 1. **XmlDocument类**: XmlDocument是C#中最常用的XML读写类,它提供了丰富的...

    深入理解C#中的XML

    C#中的`XPathNavigator`和`XPathExpression`类可以实现XPath查询。XSLT(可扩展样式表语言转换)则用于转换XML文档,C#的`XslCompiledTransform`类支持执行XSLT转换。 总结: 《深入理解C#中的XML》涵盖了从基本的...

    C# xpath 最新应用语法

    在C#中,通常会使用`System.Xml.XPath`命名空间下的类,如`XPathDocument`和`XPathNavigator`来操作XML文档并执行XPath查询。以下是一个简单的示例: ```csharp XPathDocument doc = new XPathDocument("books.xml...

    C#操作XML文件完整源码(十分经典)

    C#中的`XPathNavigator`和`XPathDocument`类支持XPath查询。 - XSLT:XML样式表转换,用于将XML转换成其他格式,如HTML。C#的`XslCompiledTransform`类用于执行XSLT转换。 6. **XML序列化和反序列化**: - 序列化...

    XML数据读写函数.类

    综上所述,这个压缩包文件可能包含了一个C#类库,其中定义了一些自定义的XML读写函数,这些函数使用了C#内置的XML处理类,如`XmlDocument`,并可能集成了XPath查询功能,以简化XML数据的处理流程。开发者可以通过...

    C# .Net 操作xml数据类

    总结,C# .NET 操作XML数据类涉及的内容广泛,包括XML的基础知识、解析器的选择、DOM操作、LINQ to XML的使用、序列化和反序列化以及XPath和XSLT等。这些工具和技术使得C#成为处理XML的强大平台,能够满足各种数据...

    C#XML入门经典 C#编程人员必备的XML技能

    XML(eXtensible Markup Language)是一种用于存储和传输数据的标记语言,它在软件开发领域,尤其是在C#编程中,扮演着至关重要的角色。C#程序员掌握XML技能是提高工作效率和灵活性的关键。本篇文章将深入探讨C#与...

    xml帮助类,xml,C#

    在实际应用中,为了提高性能和减少内存占用,开发者可能会选择其他XML处理类,如`XDocument`(LINQ to XML)或者`XmlReader`/`XmlWriter`,这些类提供了不同的特性和使用场景。不过,对于需要完整DOM(Document ...

    深入理解C#中的XML(标签版)/含随书光盘源码

    在C#中,你可以使用xsd.exe工具生成C#类,这些类可以直接映射到XML架构,从而实现强类型的数据绑定。 XML的序列化和反序列化也是C#中XML应用的重要部分。通过序列化,你可以将对象的状态转换为XML文档,反之亦然。...

    C#XML入门经典电子教程,C#编程人员必备的XML技能

    在C#中,你可以使用System.Xml.Schema命名空间的类来验证XML文档是否符合指定的XSD模式,确保数据的一致性和准确性。 除了基础操作外,C#还支持将XML序列化和反序列化为对象。这意味着你可以将C#对象转换为XML字符...

    xmlXPath_C#_wrongsx4_mightymst_

    在描述中提到,使用XPathNavigator执行计算,这通常指的是应用XPath表达式来选取XML文档中的特定元素。接着,对这些选中的元素进行加密和解密操作,这是在处理敏感数据时常见的安全措施。加密确保了即使数据被非法...

    在C#中使用XML教程

    C#提供了System.Xml命名空间,包含了多个处理XML的类,如`XmlDocument`、`XmlNodeReader`、`XPathNavigator`等。本教程主要关注最常用的`XmlDocument`和`XDocument`。 ## 三、使用XmlDocument读取XML `XmlDocument...

    C#操作XML实例

    C#中的`XPathNavigator`和`XPathDocument`类支持XPath查询。 - `XDocument`是LINQ to XML的一部分,提供了一种更简洁的API来处理XML。例如,用XDocument读取和修改XML: ```csharp XDocument doc = XDocument....

    C#XML入门经典书籍

    C#中,XPathNavigator和XPathDocument类用于XPath查询,而XslCompiledTransform类用于执行XSLT转换。 5. **XML Schema (XSD)验证**:用于确保XML文档符合特定的结构规则。C#的XmlSchemaSet类可用于加载XML Schema...

    C# XML文件读取示例

    在C#编程环境中,XML(eXtensible Markup Language)是一种常用的数据交换格式,它具有结构化、易于理解和解析的特点。本示例将详细介绍如何在C#中读取XML文件,帮助开发者理解并掌握相关技术。 首先,让我们了解...

    学习中写的C#操作xml文件工程,用的原生xml相关类

    在C#中,我们可以使用`XPathNavigator`和`XPathDocument`类来执行XPath查询。例如,`XPathNavigator.Select()`方法可以根据XPath表达式找到一组匹配的节点。 4. **添加、删除和修改节点**: - 添加节点:可以使用`...

Global site tag (gtag.js) - Google Analytics