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.
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#编程中,XPath可以与`System.Xml`命名空间中的类,如`XmlNode`, `XmlDocument`, `XPathNavigator`和`XPathExpression`等结合使用,方便地检索和操作XML数据。例如,`XmlNode.SelectNodes()`方法可以接受一个...
C#中的XPathNavigator和XPathDocument类可以帮助我们使用XPath。例如,获取XML中所有"子节点1"的值: ```csharp using System.Xml.XPath; // 创建XPathNavigator对象 XPathDocument xpathDoc = new XPathDocument...
结合题目中的“C#写的测试XPath的小工具”,我们可以探讨如何在C#中使用XPath,以及创建这样的测试工具的基本步骤。 首先,要使用XPath在C#中处理XML文档,你需要引入System.Xml命名空间,其中包含XPathNavigator和...
在IT行业中,XML(eXtensible Markup Language)是一种常用的数据交换格式,它结构清晰、易于解析,常用于存储和传输数据。C#是.NET框架下的主要编程语言,具有丰富的库支持,使得处理XML文件变得相当简单。当我们...
在C#中,System.Xml命名空间提供了许多类来支持XML操作,其中最常用的是XmlDocument、XmlNodeReader、XPathNavigator和XmlWriter等。 1. **XmlDocument类**: XmlDocument是C#中最常用的XML读写类,它提供了丰富的...
C#中的`XPathNavigator`和`XPathExpression`类可以实现XPath查询。XSLT(可扩展样式表语言转换)则用于转换XML文档,C#的`XslCompiledTransform`类支持执行XSLT转换。 总结: 《深入理解C#中的XML》涵盖了从基本的...
在C#中,通常会使用`System.Xml.XPath`命名空间下的类,如`XPathDocument`和`XPathNavigator`来操作XML文档并执行XPath查询。以下是一个简单的示例: ```csharp XPathDocument doc = new XPathDocument("books.xml...
C#中的`XPathNavigator`和`XPathDocument`类支持XPath查询。 - XSLT:XML样式表转换,用于将XML转换成其他格式,如HTML。C#的`XslCompiledTransform`类用于执行XSLT转换。 6. **XML序列化和反序列化**: - 序列化...
综上所述,这个压缩包文件可能包含了一个C#类库,其中定义了一些自定义的XML读写函数,这些函数使用了C#内置的XML处理类,如`XmlDocument`,并可能集成了XPath查询功能,以简化XML数据的处理流程。开发者可以通过...
总结,C# .NET 操作XML数据类涉及的内容广泛,包括XML的基础知识、解析器的选择、DOM操作、LINQ to XML的使用、序列化和反序列化以及XPath和XSLT等。这些工具和技术使得C#成为处理XML的强大平台,能够满足各种数据...
XML(eXtensible Markup Language)是一种用于存储和传输数据的标记语言,它在软件开发领域,尤其是在C#编程中,扮演着至关重要的角色。C#程序员掌握XML技能是提高工作效率和灵活性的关键。本篇文章将深入探讨C#与...
在实际应用中,为了提高性能和减少内存占用,开发者可能会选择其他XML处理类,如`XDocument`(LINQ to XML)或者`XmlReader`/`XmlWriter`,这些类提供了不同的特性和使用场景。不过,对于需要完整DOM(Document ...
在C#中,你可以使用xsd.exe工具生成C#类,这些类可以直接映射到XML架构,从而实现强类型的数据绑定。 XML的序列化和反序列化也是C#中XML应用的重要部分。通过序列化,你可以将对象的状态转换为XML文档,反之亦然。...
在C#中,你可以使用System.Xml.Schema命名空间的类来验证XML文档是否符合指定的XSD模式,确保数据的一致性和准确性。 除了基础操作外,C#还支持将XML序列化和反序列化为对象。这意味着你可以将C#对象转换为XML字符...
在描述中提到,使用XPathNavigator执行计算,这通常指的是应用XPath表达式来选取XML文档中的特定元素。接着,对这些选中的元素进行加密和解密操作,这是在处理敏感数据时常见的安全措施。加密确保了即使数据被非法...
C#提供了System.Xml命名空间,包含了多个处理XML的类,如`XmlDocument`、`XmlNodeReader`、`XPathNavigator`等。本教程主要关注最常用的`XmlDocument`和`XDocument`。 ## 三、使用XmlDocument读取XML `XmlDocument...
C#中的`XPathNavigator`和`XPathDocument`类支持XPath查询。 - `XDocument`是LINQ to XML的一部分,提供了一种更简洁的API来处理XML。例如,用XDocument读取和修改XML: ```csharp XDocument doc = XDocument....
C#中,XPathNavigator和XPathDocument类用于XPath查询,而XslCompiledTransform类用于执行XSLT转换。 5. **XML Schema (XSD)验证**:用于确保XML文档符合特定的结构规则。C#的XmlSchemaSet类可用于加载XML Schema...
在C#编程环境中,XML(eXtensible Markup Language)是一种常用的数据交换格式,它具有结构化、易于理解和解析的特点。本示例将详细介绍如何在C#中读取XML文件,帮助开发者理解并掌握相关技术。 首先,让我们了解...
在C#中,我们可以使用`XPathNavigator`和`XPathDocument`类来执行XPath查询。例如,`XPathNavigator.Select()`方法可以根据XPath表达式找到一组匹配的节点。 4. **添加、删除和修改节点**: - 添加节点:可以使用`...