-
Notifications
You must be signed in to change notification settings - Fork 0
/
XPathIteratorMergeExample.cs
57 lines (50 loc) · 1.78 KB
/
XPathIteratorMergeExample.cs
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
using System.Xml.XPath;
using XPathExamples.Common;
namespace XPathExamples.Examples
{
/// <summary>
/// <see cref="XPathNodeIterator"/> merged select results.
/// </summary>
public class XPathIteratorMergeExample : ExampleBase
{
/// <inheritdoc/>
public override string Name => @"""XPathNodeIterator"" merge several query results";
/// <inheritdoc/>
public override void Execute()
{
var sourceXml = @"<?xml version=""1.0""?>
<catalog>
<book id=""bk101"">
<author gender=""male"">Gambardella, Matthew</author>
<title>XML Developer's Guide</title>
<genre>Computer</genre>
<price>44.95</price>
</book>
<book id=""bk102"">
<author gender=""female"">Olga</author>
<title>C++ Developer's Guide</title>
<genre>Computer</genre>
<price>55.25</price>
</book>
<book id=""bk103"">
<author gender=""female"">Mike</author>
<title>C# Developer's Guide</title>
<genre>Computer</genre>
<price>23.55</price>
</book>
</catalog>";
var document = XPathDocumentFromString(sourceXml);
var navigator = document.CreateNavigator();
var query1 = @"/catalog/book[@id = 'bk101']/author/text()";
var query2 = @"/catalog/book[@id != 'bk101']/author/text()";
Print("[XML]", sourceXml);
Print("[Query1]", query1);
Print("[Query2]", query2);
Print("Merging", "...");
var result1 = navigator.Select(query1);
var result2 = navigator.Select(query2);
var merged = new XPathNodeIteratorCombine(result1, result2);
Print("[Result]", merged);
}
}
}