~centralelyon2010/inkscape/imagelinks2

« back to all changes in this revision

Viewing changes to src/dom/work/xpathtests.cpp

  • Committer: ishmal
  • Date: 2006-04-12 13:25:21 UTC
  • Revision ID: ishmal@users.sourceforge.net-20060412132521-5ynoezpwbzq4d1c3
Add new rearranged /dom directory

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
/**
 
2
 * Phoebe DOM Implementation.
 
3
 *
 
4
 * This is a C++ approximation of the W3C DOM model, which follows
 
5
 * fairly closely the specifications in the various .idl files, copies of
 
6
 * which are provided for reference.  Most important is this one:
 
7
 *
 
8
 * http://www.w3.org/TR/2004/REC-DOM-Level-3-Core-20040407/idl-definitions.html
 
9
 *
 
10
 * Authors:
 
11
 *   Bob Jamison
 
12
 *
 
13
 * Copyright (C) 2005 Bob Jamison
 
14
 *
 
15
 *  This library is free software; you can redistribute it and/or
 
16
 *  modify it under the terms of the GNU Lesser General Public
 
17
 *  License as published by the Free Software Foundation; either
 
18
 *  version 2.1 of the License, or (at your option) any later version.
 
19
 *
 
20
 *  This library is distributed in the hope that it will be useful,
 
21
 *  but WITHOUT ANY WARRANTY; without even the implied warranty of
 
22
 *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
 
23
 *  Lesser General Public License for more details.
 
24
 *
 
25
 *  You should have received a copy of the GNU Lesser General Public
 
26
 *  License along with this library; if not, write to the Free Software
 
27
 *  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
 
28
 */
 
29
 
 
30
 
 
31
 
 
32
typedef struct
 
33
{
 
34
    char *xpathStr;
 
35
    char *desc;
 
36
    char *xml;
 
37
} XpathTest;
 
38
 
 
39
XpathTest xpathTests[] =
 
40
{
 
41
 
 
42
{
 
43
"/AAA",
 
44
"Select the root element AAA",
 
45
"     <AAA>"
 
46
"          <BBB/>"
 
47
"          <CCC/>"
 
48
"          <BBB/>"
 
49
"          <BBB/>"
 
50
"          <DDD>"
 
51
"               <BBB/>"
 
52
"          </DDD>"
 
53
"          <CCC/>"
 
54
"     </AAA>"
 
55
},
 
56
 
 
57
{
 
58
"/AAA/CCC",
 
59
"Select all elements CCC which are children of the root element AAA",
 
60
"     <AAA>"
 
61
"          <BBB/>"
 
62
"          <CCC/>"
 
63
"          <BBB/>"
 
64
"          <BBB/>"
 
65
"          <DDD>"
 
66
"               <BBB/>"
 
67
"          </DDD>"
 
68
"          <CCC/>"
 
69
"     </AAA>"
 
70
},
 
71
 
 
72
{
 
73
"/AAA/DDD/BBB",
 
74
"Select all elements BBB which are children of DDD which are children of the root element AAA",
 
75
"     <AAA>"
 
76
"          <BBB/>"
 
77
"          <CCC/>"
 
78
"          <BBB/>"
 
79
"          <BBB/>"
 
80
"          <DDD>"
 
81
"               <BBB/>"
 
82
"          </DDD>"
 
83
"          <CCC/>"
 
84
"     </AAA>"
 
85
"//BBB",
 
86
},
 
87
 
 
88
{
 
89
"Select all elements BBB",
 
90
"     <AAA>"
 
91
"          <BBB/>"
 
92
"          <CCC/>"
 
93
"          <BBB/>"
 
94
"          <DDD>"
 
95
"               <BBB/>"
 
96
"          </DDD>"
 
97
"          <CCC>"
 
98
"               <DDD>"
 
99
"                    <BBB/>"
 
100
"                    <BBB/>"
 
101
"               </DDD>"
 
102
"          </CCC>"
 
103
"     </AAA>"
 
104
},
 
105
 
 
106
{
 
107
"//DDD/BBB",
 
108
"Select all elements BBB which are children of DDD",
 
109
"     <AAA>"
 
110
"          <BBB/>"
 
111
"          <CCC/>"
 
112
"          <BBB/>"
 
113
"          <DDD>"
 
114
"               <BBB/>"
 
115
"          </DDD>"
 
116
"          <CCC>"
 
117
"               <DDD>"
 
118
"                    <BBB/>"
 
119
"                    <BBB/>"
 
120
"               </DDD>"
 
121
"          </CCC>"
 
122
"     </AAA>"
 
123
},
 
124
 
 
125
{
 
126
"/AAA/CCC/DDD/*",
 
127
"Select all elements enclosed by elements /AAA/CCC/DDD",
 
128
"     <AAA>"
 
129
"          <XXX>"
 
130
"               <DDD>"
 
131
"                    <BBB/>"
 
132
"                    <BBB/>"
 
133
"                    <EEE/>"
 
134
"                    <FFF/>"
 
135
"               </DDD>"
 
136
"          </XXX>"
 
137
"          <CCC>"
 
138
"               <DDD>"
 
139
"                    <BBB/>"
 
140
"                    <BBB/>"
 
141
"                    <EEE/>"
 
142
"                    <FFF/>"
 
143
"               </DDD>"
 
144
"          </CCC>"
 
145
"          <CCC>"
 
146
"               <BBB>"
 
147
"                    <BBB>"
 
148
"                         <BBB/>"
 
149
"                    </BBB>"
 
150
"               </BBB>"
 
151
"          </CCC>"
 
152
"     </AAA>"
 
153
},
 
154
 
 
155
{
 
156
"/*/*/*/BBB",
 
157
"Select all elements BBB which have 3 ancestors",
 
158
"     <AAA>"
 
159
"          <XXX>"
 
160
"               <DDD>"
 
161
"                    <BBB/>"
 
162
"                    <BBB/>"
 
163
"                    <EEE/>"
 
164
"                    <FFF/>"
 
165
"               </DDD>"
 
166
"          </XXX>"
 
167
"          <CCC>"
 
168
"               <DDD>"
 
169
"                    <BBB/>"
 
170
"                    <BBB/>"
 
171
"                    <EEE/>"
 
172
"                    <FFF/>"
 
173
"               </DDD>"
 
174
"          </CCC>"
 
175
"          <CCC>"
 
176
"               <BBB>"
 
177
"                    <BBB>"
 
178
"                         <BBB/>"
 
179
"                    </BBB>"
 
180
"               </BBB>"
 
181
"          </CCC>"
 
182
"     </AAA>"
 
183
},
 
184
 
 
185
{
 
186
"//*",
 
187
"Select all elements",
 
188
"     <AAA>"
 
189
"          <XXX>"
 
190
"               <DDD>"
 
191
"                    <BBB/>"
 
192
"                    <BBB/>"
 
193
"                    <EEE/>"
 
194
"                    <FFF/>"
 
195
"               </DDD>"
 
196
"          </XXX>"
 
197
"          <CCC>"
 
198
"               <DDD>"
 
199
"                    <BBB/>"
 
200
"                    <BBB/>"
 
201
"                    <EEE/>"
 
202
"                    <FFF/>"
 
203
"               </DDD>"
 
204
"          </CCC>"
 
205
"          <CCC>"
 
206
"               <BBB>"
 
207
"                    <BBB>"
 
208
"                         <BBB/>"
 
209
"                    </BBB>"
 
210
"               </BBB>"
 
211
"          </CCC>"
 
212
"     </AAA>"
 
213
},
 
214
 
 
215
{
 
216
"/AAA/BBB[1]",
 
217
"Select the first BBB child of element AAA",
 
218
"     <AAA>"
 
219
"          <BBB/>"
 
220
"          <BBB/>"
 
221
"          <BBB/>"
 
222
"          <BBB/>"
 
223
"     </AAA>"
 
224
},
 
225
 
 
226
{
 
227
"/AAA/BBB[last()]",
 
228
"Select the last BBB child of element AAA",
 
229
"     <AAA>"
 
230
"          <BBB/>"
 
231
"          <BBB/>"
 
232
"          <BBB/>"
 
233
"          <BBB/>"
 
234
"     </AAA>"
 
235
},
 
236
 
 
237
{
 
238
"//@id",
 
239
"Select all attributes @id",
 
240
"     <AAA>"
 
241
"          <BBB id = 'b1'/>"
 
242
"          <BBB id = 'b2'/>"
 
243
"          <BBB name = 'bbb'/>"
 
244
"          <BBB/>"
 
245
"     </AAA>"
 
246
},
 
247
 
 
248
{
 
249
"//BBB[@id]",
 
250
"Select BBB elements which have attribute id",
 
251
"     <AAA>"
 
252
"          <BBB id = 'b1'/>"
 
253
"          <BBB id = 'b2'/>"
 
254
"          <BBB name = 'bbb'/>"
 
255
"          <BBB/>"
 
256
"     </AAA>"
 
257
},
 
258
 
 
259
{
 
260
"//BBB[@name]",
 
261
"Select BBB elements which have attribute name",
 
262
"     <AAA>"
 
263
"          <BBB id = 'b1'/>"
 
264
"          <BBB id = 'b2'/>"
 
265
"          <BBB name = 'bbb'/>"
 
266
"          <BBB/>"
 
267
"     </AAA>"
 
268
},
 
269
 
 
270
{
 
271
"//BBB[@*]",
 
272
"Select BBB elements which have any attribute",
 
273
"     <AAA>"
 
274
"          <BBB id = 'b1'/>"
 
275
"          <BBB id = 'b2'/>"
 
276
"          <BBB name = 'bbb'/>"
 
277
"          <BBB/>"
 
278
"     </AAA>"
 
279
},
 
280
 
 
281
{
 
282
"//BBB[not(@*)]",
 
283
"Select BBB elements without an attribute",
 
284
"     <AAA>"
 
285
"          <BBB id = 'b1'/>"
 
286
"          <BBB id = 'b2'/>"
 
287
"          <BBB name = 'bbb'/>"
 
288
"          <BBB/>"
 
289
"     </AAA>"
 
290
},
 
291
 
 
292
{
 
293
"//BBB[@id='b1']",
 
294
"Select BBB elements which have attribute id with value b1",
 
295
"     <AAA>"
 
296
"          <BBB id = 'b1'/>"
 
297
"          <BBB name = ' bbb '/>"
 
298
"          <BBB name = 'bbb'/>"
 
299
"     </AAA>"
 
300
},
 
301
 
 
302
{
 
303
"//BBB[@name='bbb']",
 
304
"Select BBB elements which have attribute name with value 'bbb'",
 
305
"     <AAA>"
 
306
"          <BBB id = 'b1'/>"
 
307
"          <BBB name = ' bbb '/>"
 
308
"          <BBB name = 'bbb'/>"
 
309
"     </AAA>"
 
310
},
 
311
 
 
312
{
 
313
"//BBB[normalize-space(@name)='bbb']",
 
314
"Select BBB elements which have attribute name with value bbb, leading and trailing spaces are removed before comparison",
 
315
"     <AAA>"
 
316
"          <BBB id = 'b1'/>"
 
317
"          <BBB name = ' bbb '/>"
 
318
"          <BBB name = 'bbb'/>"
 
319
"     </AAA>"
 
320
},
 
321
 
 
322
{
 
323
"//*[count(BBB)=2]",
 
324
"Select elements which have two children BBB",
 
325
"     <AAA>"
 
326
"          <CCC>"
 
327
"               <BBB/>"
 
328
"               <BBB/>"
 
329
"               <BBB/>"
 
330
"          </CCC>"
 
331
"          <DDD>"
 
332
"               <BBB/>"
 
333
"               <BBB/>"
 
334
"          </DDD>"
 
335
"          <EEE>"
 
336
"               <CCC/>"
 
337
"               <DDD/>"
 
338
"          </EEE>"
 
339
"     </AAA>"
 
340
},
 
341
 
 
342
{
 
343
"//*[count(*)=2]",
 
344
"Select elements which have 2 children",
 
345
"     <AAA>"
 
346
"          <CCC>"
 
347
"               <BBB/>"
 
348
"               <BBB/>"
 
349
"               <BBB/>"
 
350
"          </CCC>"
 
351
"          <DDD>"
 
352
"               <BBB/>"
 
353
"               <BBB/>"
 
354
"          </DDD>"
 
355
"          <EEE>"
 
356
"               <CCC/>"
 
357
"               <DDD/>"
 
358
"          </EEE>"
 
359
"     </AAA>"
 
360
},
 
361
 
 
362
{
 
363
"//*[count(*)=3]",
 
364
"Select elements which have 3 children",
 
365
"     <AAA>"
 
366
"          <CCC>"
 
367
"               <BBB/>"
 
368
"               <BBB/>"
 
369
"               <BBB/>"
 
370
"          </CCC>"
 
371
"          <DDD>"
 
372
"               <BBB/>"
 
373
"               <BBB/>"
 
374
"          </DDD>"
 
375
"          <EEE>"
 
376
"               <CCC/>"
 
377
"               <DDD/>"
 
378
"          </EEE>"
 
379
"     </AAA>"
 
380
},
 
381
 
 
382
{
 
383
"//*[name()='BBB']",
 
384
"Select all elements with name BBB, equivalent with //BBB",
 
385
"     <AAA>"
 
386
"          <BCC>"
 
387
"               <BBB/>"
 
388
"               <BBB/>"
 
389
"               <BBB/>"
 
390
"          </BCC>"
 
391
"          <DDB>"
 
392
"               <BBB/>"
 
393
"               <BBB/>"
 
394
"          </DDB>"
 
395
"          <BEC>"
 
396
"               <CCC/>"
 
397
"               <DBD/>"
 
398
"          </BEC>"
 
399
"     </AAA>"
 
400
},
 
401
 
 
402
{
 
403
"//*[starts-with(name(),'B')]",
 
404
"Select all elements name of which starts with letter B",
 
405
"     <AAA>"
 
406
"          <BCC>"
 
407
"               <BBB/>"
 
408
"               <BBB/>"
 
409
"               <BBB/>"
 
410
"          </BCC>"
 
411
"          <DDB>"
 
412
"               <BBB/>"
 
413
"               <BBB/>"
 
414
"          </DDB>"
 
415
"          <BEC>"
 
416
"               <CCC/>"
 
417
"               <DBD/>"
 
418
"          </BEC>"
 
419
"     </AAA>"
 
420
},
 
421
 
 
422
{
 
423
"//*[contains(name(),'C')]",
 
424
"Select all elements name of which contain letter C",
 
425
"     <AAA>"
 
426
"          <BCC>"
 
427
"               <BBB/>"
 
428
"               <BBB/>"
 
429
"               <BBB/>"
 
430
"          </BCC>"
 
431
"          <DDB>"
 
432
"               <BBB/>"
 
433
"               <BBB/>"
 
434
"          </DDB>"
 
435
"          <BEC>"
 
436
"               <CCC/>"
 
437
"               <DBD/>"
 
438
"          </BEC>"
 
439
"     </AAA>"
 
440
},
 
441
 
 
442
{
 
443
"//*[string-length(name()) = 3]",
 
444
"Select elements with three-letter name",
 
445
"     <AAA>"
 
446
"          <Q/>"
 
447
"          <SSSS/>"
 
448
"          <BB/>"
 
449
"          <CCC/>"
 
450
"          <DDDDDDDD/>"
 
451
"          <EEEE/>"
 
452
"     </AAA>"
 
453
},
 
454
 
 
455
{
 
456
"//*[string-length(name()) < 3]",
 
457
"Select elements name of which has one or two characters",
 
458
"     <AAA>"
 
459
"          <Q/>"
 
460
"          <SSSS/>"
 
461
"          <BB/>"
 
462
"          <CCC/>"
 
463
"          <DDDDDDDD/>"
 
464
"          <EEEE/>"
 
465
"     </AAA>"
 
466
},
 
467
 
 
468
{
 
469
"//*[string-length(name()) > 3]",
 
470
"Select elements with name longer than three characters",
 
471
"     <AAA>"
 
472
"          <Q/>"
 
473
"          <SSSS/>"
 
474
"          <BB/>"
 
475
"          <CCC/>"
 
476
"          <DDDDDDDD/>"
 
477
"          <EEEE/>"
 
478
"     </AAA>"
 
479
},
 
480
 
 
481
{
 
482
"//CCC | //BBB",
 
483
"Select all elements CCC and BBB",
 
484
"     <AAA>"
 
485
"          <BBB/>"
 
486
"          <CCC/>"
 
487
"          <DDD>"
 
488
"               <CCC/>"
 
489
"          </DDD>"
 
490
"          <EEE/>"
 
491
"     </AAA>"
 
492
},
 
493
 
 
494
{
 
495
"/AAA/EEE | //BBB",
 
496
"Select all elements BBB and elements EEE which are children of root element AAA",
 
497
"     <AAA>"
 
498
"          <BBB/>"
 
499
"          <CCC/>"
 
500
"          <DDD>"
 
501
"               <CCC/>"
 
502
"          </DDD>"
 
503
"          <EEE/>"
 
504
"     </AAA>"
 
505
},
 
506
 
 
507
{
 
508
"/AAA/EEE | //DDD/CCC | /AAA | //BBB",
 
509
"Number of combinations is not restricted",
 
510
"     <AAA>"
 
511
"          <BBB/>"
 
512
"          <CCC/>"
 
513
"          <DDD>"
 
514
"               <CCC/>"
 
515
"          </DDD>"
 
516
"          <EEE/>"
 
517
"     </AAA>"
 
518
},
 
519
 
 
520
{
 
521
"/AAA",
 
522
"Equivalent of /child::AAA",
 
523
"     <AAA>"
 
524
"          <BBB/>"
 
525
"          <CCC/>"
 
526
"     </AAA>"
 
527
},
 
528
 
 
529
{
 
530
"/child::AAA",
 
531
"Equivalent of /AAA",
 
532
"     <AAA>"
 
533
"          <BBB/>"
 
534
"          <CCC/>"
 
535
"     </AAA>"
 
536
},
 
537
 
 
538
{
 
539
"/AAA/BBB",
 
540
"Equivalent of /child::AAA/child::BBB",
 
541
"     <AAA>"
 
542
"          <BBB/>"
 
543
"          <CCC/>"
 
544
"     </AAA>"
 
545
},
 
546
 
 
547
{
 
548
"/child::AAA/child::BBB",
 
549
"Equivalent of /AAA/BBB",
 
550
"     <AAA>"
 
551
"          <BBB/>"
 
552
"          <CCC/>"
 
553
"     </AAA>"
 
554
},
 
555
 
 
556
{
 
557
"/child::AAA/BBB",
 
558
"Both possibilities can be combined",
 
559
"     <AAA>"
 
560
"          <BBB/>"
 
561
"          <CCC/>"
 
562
"     </AAA>"
 
563
},
 
564
 
 
565
{
 
566
"/descendant::*",
 
567
"Select all descendants of document root and therefore all elements",
 
568
"     <AAA>"
 
569
"          <BBB>"
 
570
"               <DDD>"
 
571
"                    <CCC>"
 
572
"                         <DDD/>"
 
573
"                         <EEE/>"
 
574
"                    </CCC>"
 
575
"               </DDD>"
 
576
"          </BBB>"
 
577
"          <CCC>"
 
578
"               <DDD>"
 
579
"                    <EEE>"
 
580
"                         <DDD>"
 
581
"                              <FFF/>"
 
582
"                         </DDD>"
 
583
"                    </EEE>"
 
584
"               </DDD>"
 
585
"          </CCC>"
 
586
"     </AAA>"
 
587
},
 
588
 
 
589
{
 
590
"/AAA/BBB/descendant::*",
 
591
"Select all descendants of /AAA/BBB",
 
592
"     <AAA>"
 
593
"          <BBB>"
 
594
"               <DDD>"
 
595
"                    <CCC>"
 
596
"                         <DDD/>"
 
597
"                         <EEE/>"
 
598
"                    </CCC>"
 
599
"               </DDD>"
 
600
"          </BBB>"
 
601
"          <CCC>"
 
602
"               <DDD>"
 
603
"                    <EEE>"
 
604
"                         <DDD>"
 
605
"                              <FFF/>"
 
606
"                         </DDD>"
 
607
"                    </EEE>"
 
608
"               </DDD>"
 
609
"          </CCC>"
 
610
"     </AAA>"
 
611
},
 
612
 
 
613
{
 
614
"//CCC/descendant::*",
 
615
"Select all elements which have CCC among its ancestors",
 
616
"     <AAA>"
 
617
"          <BBB>"
 
618
"               <DDD>"
 
619
"                    <CCC>"
 
620
"                         <DDD/>"
 
621
"                         <EEE/>"
 
622
"                    </CCC>"
 
623
"               </DDD>"
 
624
"          </BBB>"
 
625
"          <CCC>"
 
626
"               <DDD>"
 
627
"                    <EEE>"
 
628
"                         <DDD>"
 
629
"                              <FFF/>"
 
630
"                         </DDD>"
 
631
"                    </EEE>"
 
632
"               </DDD>"
 
633
"          </CCC>"
 
634
"     </AAA>"
 
635
},
 
636
 
 
637
{
 
638
"//CCC/descendant::DDD",
 
639
"Select elements DDD which have CCC among its ancestors",
 
640
"     <AAA>"
 
641
"          <BBB>"
 
642
"               <DDD>"
 
643
"                    <CCC>"
 
644
"                         <DDD/>"
 
645
"                         <EEE/>"
 
646
"                    </CCC>"
 
647
"               </DDD>"
 
648
"          </BBB>"
 
649
"          <CCC>"
 
650
"               <DDD>"
 
651
"                    <EEE>"
 
652
"                         <DDD>"
 
653
"                              <FFF/>"
 
654
"                         </DDD>"
 
655
"                    </EEE>"
 
656
"               </DDD>"
 
657
"          </CCC>"
 
658
"     </AAA>"
 
659
},
 
660
 
 
661
{
 
662
"//DDD/parent::*",
 
663
"Select all parents of DDD element",
 
664
"     <AAA>"
 
665
"          <BBB>"
 
666
"               <DDD>"
 
667
"                    <CCC>"
 
668
"                         <DDD/>"
 
669
"                         <EEE/>"
 
670
"                    </CCC>"
 
671
"               </DDD>"
 
672
"          </BBB>"
 
673
"          <CCC>"
 
674
"               <DDD>"
 
675
"                    <EEE>"
 
676
"                         <DDD>"
 
677
"                              <FFF/>"
 
678
"                         </DDD>"
 
679
"                    </EEE>"
 
680
"               </DDD>"
 
681
"          </CCC>"
 
682
"     </AAA>"
 
683
},
 
684
 
 
685
{
 
686
"/AAA/BBB/DDD/CCC/EEE/ancestor::*",
 
687
"Select all elements given in this absolute path",
 
688
"     <AAA>"
 
689
"          <BBB>"
 
690
"               <DDD>"
 
691
"                    <CCC>"
 
692
"                         <DDD/>"
 
693
"                         <EEE/>"
 
694
"                    </CCC>"
 
695
"               </DDD>"
 
696
"          </BBB>"
 
697
"          <CCC>"
 
698
"               <DDD>"
 
699
"                    <EEE>"
 
700
"                         <DDD>"
 
701
"                              <FFF/>"
 
702
"                         </DDD>"
 
703
"                    </EEE>"
 
704
"               </DDD>"
 
705
"          </CCC>"
 
706
"     </AAA>"
 
707
},
 
708
 
 
709
{
 
710
"//FFF/ancestor::*",
 
711
"Select ancestors of FFF element",
 
712
"     <AAA>"
 
713
"          <BBB>"
 
714
"               <DDD>"
 
715
"                    <CCC>"
 
716
"                         <DDD/>"
 
717
"                         <EEE/>"
 
718
"                    </CCC>"
 
719
"               </DDD>"
 
720
"          </BBB>"
 
721
"          <CCC>"
 
722
"               <DDD>"
 
723
"                    <EEE>"
 
724
"                         <DDD>"
 
725
"                              <FFF/>"
 
726
"                         </DDD>"
 
727
"                    </EEE>"
 
728
"               </DDD>"
 
729
"          </CCC>"
 
730
"     </AAA>"
 
731
},
 
732
 
 
733
{
 
734
"/AAA/BBB/following-sibling::*",
 
735
"The following-sibling axis contains all the following siblings of the context node.",
 
736
"     <AAA>"
 
737
"          <BBB>"
 
738
"               <CCC/>"
 
739
"               <DDD/>"
 
740
"          </BBB>"
 
741
"          <XXX>"
 
742
"               <DDD>"
 
743
"                    <EEE/>"
 
744
"                    <DDD/>"
 
745
"                    <CCC/>"
 
746
"                    <FFF/>"
 
747
"                    <FFF>"
 
748
"                         <GGG/>"
 
749
"                    </FFF>"
 
750
"               </DDD>"
 
751
"          </XXX>"
 
752
"          <CCC>"
 
753
"               <DDD/>"
 
754
"          </CCC>"
 
755
"     </AAA>"
 
756
},
 
757
 
 
758
{
 
759
"//CCC/following-sibling::*",
 
760
"The following-sibling axis contains all the following siblings of the context node.",
 
761
"     <AAA>"
 
762
"          <BBB>"
 
763
"               <CCC/>"
 
764
"               <DDD/>"
 
765
"          </BBB>"
 
766
"          <XXX>"
 
767
"               <DDD>"
 
768
"                    <EEE/>"
 
769
"                    <DDD/>"
 
770
"                    <CCC/>"
 
771
"                    <FFF/>"
 
772
"                    <FFF>"
 
773
"                         <GGG/>"
 
774
"                    </FFF>"
 
775
"               </DDD>"
 
776
"          </XXX>"
 
777
"          <CCC>"
 
778
"               <DDD/>"
 
779
"          </CCC>"
 
780
"     </AAA>"
 
781
},
 
782
 
 
783
{
 
784
"/AAA/XXX/preceding-sibling::*",
 
785
"The preceding-sibling axis contains all the preceding siblings of the context node.",
 
786
"     <AAA>"
 
787
"          <BBB>"
 
788
"               <CCC/>"
 
789
"               <DDD/>"
 
790
"          </BBB>"
 
791
"          <XXX>"
 
792
"               <DDD>"
 
793
"                    <EEE/>"
 
794
"                    <DDD/>"
 
795
"                    <CCC/>"
 
796
"                    <FFF/>"
 
797
"                    <FFF>"
 
798
"                         <GGG/>"
 
799
"                    </FFF>"
 
800
"               </DDD>"
 
801
"          </XXX>"
 
802
"          <CCC>"
 
803
"               <DDD/>"
 
804
"          </CCC>"
 
805
"     </AAA>"
 
806
},
 
807
 
 
808
{
 
809
"//CCC/preceding-sibling::*",
 
810
"     <AAA>"
 
811
"          <BBB>"
 
812
"               <CCC/>"
 
813
"               <DDD/>"
 
814
"          </BBB>"
 
815
"          <XXX>"
 
816
"               <DDD>"
 
817
"                    <EEE/>"
 
818
"                    <DDD/>"
 
819
"                    <CCC/>"
 
820
"                    <FFF/>"
 
821
"                    <FFF>"
 
822
"                         <GGG/>"
 
823
"                    </FFF>"
 
824
"               </DDD>"
 
825
"          </XXX>"
 
826
"          <CCC>"
 
827
"               <DDD/>"
 
828
"          </CCC>"
 
829
"     </AAA>"
 
830
},
 
831
 
 
832
{
 
833
"/AAA/XXX/following::*",
 
834
"Description",
 
835
"     <AAA>"
 
836
"          <BBB>"
 
837
"               <CCC/>"
 
838
"               <ZZZ>"
 
839
"                    <DDD/>"
 
840
"                    <DDD>"
 
841
"                         <EEE/>"
 
842
"                    </DDD>"
 
843
"               </ZZZ>"
 
844
"               <FFF>"
 
845
"                    <GGG/>"
 
846
"               </FFF>"
 
847
"          </BBB>"
 
848
"          <XXX>"
 
849
"               <DDD>"
 
850
"                    <EEE/>"
 
851
"                    <DDD/>"
 
852
"                    <CCC/>"
 
853
"                    <FFF/>"
 
854
"                    <FFF>"
 
855
"                         <GGG/>"
 
856
"                    </FFF>"
 
857
"               </DDD>"
 
858
"          </XXX>"
 
859
"          <CCC>"
 
860
"               <DDD/>"
 
861
"          </CCC>"
 
862
"     </AAA>"
 
863
},
 
864
 
 
865
{
 
866
"//ZZZ/following::*",
 
867
"Description",
 
868
"     <AAA>"
 
869
"          <BBB>"
 
870
"               <CCC/>"
 
871
"               <ZZZ>"
 
872
"                    <DDD/>"
 
873
"                    <DDD>"
 
874
"                         <EEE/>"
 
875
"                    </DDD>"
 
876
"               </ZZZ>"
 
877
"               <FFF>"
 
878
"                    <GGG/>"
 
879
"               </FFF>"
 
880
"          </BBB>"
 
881
"          <XXX>"
 
882
"               <DDD>"
 
883
"                    <EEE/>"
 
884
"                    <DDD/>"
 
885
"                    <CCC/>"
 
886
"                    <FFF/>"
 
887
"                    <FFF>"
 
888
"                         <GGG/>"
 
889
"                    </FFF>"
 
890
"               </DDD>"
 
891
"          </XXX>"
 
892
"          <CCC>"
 
893
"               <DDD/>"
 
894
"          </CCC>"
 
895
"     </AAA>"
 
896
},
 
897
 
 
898
{
 
899
"/AAA/XXX/preceding::*",
 
900
"Description",
 
901
"     <AAA>"
 
902
"          <BBB>"
 
903
"               <CCC/>"
 
904
"               <ZZZ>"
 
905
"                    <DDD/>"
 
906
"               </ZZZ>"
 
907
"          </BBB>"
 
908
"          <XXX>"
 
909
"               <DDD>"
 
910
"                    <EEE/>"
 
911
"                    <DDD/>"
 
912
"                    <CCC/>"
 
913
"                    <FFF/>"
 
914
"                    <FFF>"
 
915
"                         <GGG/>"
 
916
"                    </FFF>"
 
917
"               </DDD>"
 
918
"          </XXX>"
 
919
"          <CCC>"
 
920
"               <DDD/>"
 
921
"          </CCC>"
 
922
"     </AAA>"
 
923
},
 
924
 
 
925
{
 
926
"//GGG/preceding::*",
 
927
"Description",
 
928
"     <AAA>"
 
929
"          <BBB>"
 
930
"               <CCC/>"
 
931
"               <ZZZ>"
 
932
"                    <DDD/>"
 
933
"               </ZZZ>"
 
934
"          </BBB>"
 
935
"          <XXX>"
 
936
"               <DDD>"
 
937
"                    <EEE/>"
 
938
"                    <DDD/>"
 
939
"                    <CCC/>"
 
940
"                    <FFF/>"
 
941
"                    <FFF>"
 
942
"                         <GGG/>"
 
943
"                    </FFF>"
 
944
"               </DDD>"
 
945
"          </XXX>"
 
946
"          <CCC>"
 
947
"               <DDD/>"
 
948
"          </CCC>"
 
949
"     </AAA>"
 
950
},
 
951
 
 
952
{
 
953
"/AAA/XXX/descendant-or-self::*",
 
954
"Description",
 
955
"     <AAA>"
 
956
"          <BBB>"
 
957
"               <CCC/>"
 
958
"               <ZZZ>"
 
959
"                    <DDD/>"
 
960
"               </ZZZ>"
 
961
"          </BBB>"
 
962
"          <XXX>"
 
963
"               <DDD>"
 
964
"                    <EEE/>"
 
965
"                    <DDD/>"
 
966
"                    <CCC/>"
 
967
"                    <FFF/>"
 
968
"                    <FFF>"
 
969
"                         <GGG/>"
 
970
"                    </FFF>"
 
971
"               </DDD>"
 
972
"          </XXX>"
 
973
"          <CCC>"
 
974
"               <DDD/>"
 
975
"          </CCC>"
 
976
"     </AAA>"
 
977
},
 
978
 
 
979
{
 
980
"//CCC/descendant-or-self::*",
 
981
"Description",
 
982
"     <AAA>"
 
983
"          <BBB>"
 
984
"               <CCC/>"
 
985
"               <ZZZ>"
 
986
"                    <DDD/>"
 
987
"               </ZZZ>"
 
988
"          </BBB>"
 
989
"          <XXX>"
 
990
"               <DDD>"
 
991
"                    <EEE/>"
 
992
"                    <DDD/>"
 
993
"                    <CCC/>"
 
994
"                    <FFF/>"
 
995
"                    <FFF>"
 
996
"                         <GGG/>"
 
997
"                    </FFF>"
 
998
"               </DDD>"
 
999
"          </XXX>"
 
1000
"          <CCC>"
 
1001
"               <DDD/>"
 
1002
"          </CCC>"
 
1003
"     </AAA>"
 
1004
},
 
1005
 
 
1006
{
 
1007
"/AAA/XXX/DDD/EEE/ancestor-or-self::*",
 
1008
"Description",
 
1009
"     <AAA>"
 
1010
"          <BBB>"
 
1011
"               <CCC/>"
 
1012
"               <ZZZ>"
 
1013
"                    <DDD/>"
 
1014
"               </ZZZ>"
 
1015
"          </BBB>"
 
1016
"          <XXX>"
 
1017
"               <DDD>"
 
1018
"                    <EEE/>"
 
1019
"                    <DDD/>"
 
1020
"                    <CCC/>"
 
1021
"                    <FFF/>"
 
1022
"                    <FFF>"
 
1023
"                         <GGG/>"
 
1024
"                    </FFF>"
 
1025
"               </DDD>"
 
1026
"          </XXX>"
 
1027
"          <CCC>"
 
1028
"               <DDD/>"
 
1029
"          </CCC>"
 
1030
"     </AAA>"
 
1031
},
 
1032
 
 
1033
{
 
1034
"//GGG/ancestor-or-self::*",
 
1035
"Description",
 
1036
"     <AAA>"
 
1037
"          <BBB>"
 
1038
"               <CCC/>"
 
1039
"               <ZZZ>"
 
1040
"                    <DDD/>"
 
1041
"               </ZZZ>"
 
1042
"          </BBB>"
 
1043
"          <XXX>"
 
1044
"               <DDD>"
 
1045
"                    <EEE/>"
 
1046
"                    <DDD/>"
 
1047
"                    <CCC/>"
 
1048
"                    <FFF/>"
 
1049
"                    <FFF>"
 
1050
"                         <GGG/>"
 
1051
"                    </FFF>"
 
1052
"               </DDD>"
 
1053
"          </XXX>"
 
1054
"          <CCC>"
 
1055
"               <DDD/>"
 
1056
"          </CCC>"
 
1057
"     </AAA>"
 
1058
},
 
1059
 
 
1060
{
 
1061
"//GGG/ancestor::*",
 
1062
"Description",
 
1063
"     <AAA>"
 
1064
"          <BBB>"
 
1065
"               <CCC/>"
 
1066
"               <ZZZ/>"
 
1067
"          </BBB>"
 
1068
"          <XXX>"
 
1069
"               <DDD>"
 
1070
"                    <EEE/>"
 
1071
"                    <FFF>"
 
1072
"                         <HHH/>"
 
1073
"                         <GGG>"
 
1074
"                              <JJJ>"
 
1075
"                                   <QQQ/>"
 
1076
"                              </JJJ>"
 
1077
"                              <JJJ/>"
 
1078
"                         </GGG>"
 
1079
"                         <HHH/>"
 
1080
"                    </FFF>"
 
1081
"               </DDD>"
 
1082
"          </XXX>"
 
1083
"          <CCC>"
 
1084
"               <DDD/>"
 
1085
"          </CCC>"
 
1086
"     </AAA>"
 
1087
},
 
1088
 
 
1089
{
 
1090
"//GGG/descendant::*",
 
1091
"Description",
 
1092
"     <AAA>"
 
1093
"          <BBB>"
 
1094
"               <CCC/>"
 
1095
"               <ZZZ/>"
 
1096
"          </BBB>"
 
1097
"          <XXX>"
 
1098
"               <DDD>"
 
1099
"                    <EEE/>"
 
1100
"                    <FFF>"
 
1101
"                         <HHH/>"
 
1102
"                         <GGG>"
 
1103
"                              <JJJ>"
 
1104
"                                   <QQQ/>"
 
1105
"                              </JJJ>"
 
1106
"                              <JJJ/>"
 
1107
"                         </GGG>"
 
1108
"                         <HHH/>"
 
1109
"                    </FFF>"
 
1110
"               </DDD>"
 
1111
"          </XXX>"
 
1112
"          <CCC>"
 
1113
"               <DDD/>"
 
1114
"          </CCC>"
 
1115
"     </AAA>"
 
1116
},
 
1117
 
 
1118
{
 
1119
"//GGG/following::*",
 
1120
"Description",
 
1121
"     <AAA>"
 
1122
"          <BBB>"
 
1123
"               <CCC/>"
 
1124
"               <ZZZ/>"
 
1125
"          </BBB>"
 
1126
"          <XXX>"
 
1127
"               <DDD>"
 
1128
"                    <EEE/>"
 
1129
"                    <FFF>"
 
1130
"                         <HHH/>"
 
1131
"                         <GGG>"
 
1132
"                              <JJJ>"
 
1133
"                                   <QQQ/>"
 
1134
"                              </JJJ>"
 
1135
"                              <JJJ/>"
 
1136
"                         </GGG>"
 
1137
"                         <HHH/>"
 
1138
"                    </FFF>"
 
1139
"               </DDD>"
 
1140
"          </XXX>"
 
1141
"          <CCC>"
 
1142
"               <DDD/>"
 
1143
"          </CCC>"
 
1144
"     </AAA>"
 
1145
},
 
1146
 
 
1147
{
 
1148
"//GGG/preceding::*",
 
1149
"Description",
 
1150
"     <AAA>"
 
1151
"          <BBB>"
 
1152
"               <CCC/>"
 
1153
"               <ZZZ/>"
 
1154
"          </BBB>"
 
1155
"          <XXX>"
 
1156
"               <DDD>"
 
1157
"                    <EEE/>"
 
1158
"                    <FFF>"
 
1159
"                         <HHH/>"
 
1160
"                         <GGG>"
 
1161
"                              <JJJ>"
 
1162
"                                   <QQQ/>"
 
1163
"                              </JJJ>"
 
1164
"                              <JJJ/>"
 
1165
"                         </GGG>"
 
1166
"                         <HHH/>"
 
1167
"                    </FFF>"
 
1168
"               </DDD>"
 
1169
"          </XXX>"
 
1170
"          <CCC>"
 
1171
"               <DDD/>"
 
1172
"          </CCC>"
 
1173
"     </AAA>"
 
1174
},
 
1175
 
 
1176
{
 
1177
"//GGG/self::*",
 
1178
"Description",
 
1179
"     <AAA>"
 
1180
"          <BBB>"
 
1181
"               <CCC/>"
 
1182
"               <ZZZ/>"
 
1183
"          </BBB>"
 
1184
"          <XXX>"
 
1185
"               <DDD>"
 
1186
"                    <EEE/>"
 
1187
"                    <FFF>"
 
1188
"                         <HHH/>"
 
1189
"                         <GGG>"
 
1190
"                              <JJJ>"
 
1191
"                                   <QQQ/>"
 
1192
"                              </JJJ>"
 
1193
"                              <JJJ/>"
 
1194
"                         </GGG>"
 
1195
"                         <HHH/>"
 
1196
"                    </FFF>"
 
1197
"               </DDD>"
 
1198
"          </XXX>"
 
1199
"          <CCC>"
 
1200
"               <DDD/>"
 
1201
"          </CCC>"
 
1202
"     </AAA>"
 
1203
},
 
1204
 
 
1205
{
 
1206
"//GGG/ancestor::* | //GGG/descendant::* | //GGG/following::* | //GGG/preceding::* | //GGG/self::*",
 
1207
"description",
 
1208
"     <AAA>"
 
1209
"          <BBB>"
 
1210
"               <CCC/>"
 
1211
"               <ZZZ/>"
 
1212
"          </BBB>"
 
1213
"          <XXX>"
 
1214
"               <DDD>"
 
1215
"                    <EEE/>"
 
1216
"                    <FFF>"
 
1217
"                         <HHH/>"
 
1218
"                         <GGG>"
 
1219
"                              <JJJ>"
 
1220
"                                   <QQQ/>"
 
1221
"                              </JJJ>"
 
1222
"                              <JJJ/>"
 
1223
"                         </GGG>"
 
1224
"                         <HHH/>"
 
1225
"                    </FFF>"
 
1226
"               </DDD>"
 
1227
"          </XXX>"
 
1228
"          <CCC>"
 
1229
"               <DDD/>"
 
1230
"          </CCC>"
 
1231
"     </AAA>"
 
1232
},
 
1233
 
 
1234
{
 
1235
"//BBB[position() mod 2 = 0 ]",
 
1236
"Select even BBB elements",
 
1237
"     <AAA>"
 
1238
"          <BBB/>"
 
1239
"          <BBB/>"
 
1240
"          <BBB/>"
 
1241
"          <BBB/>"
 
1242
"          <BBB/>"
 
1243
"          <BBB/>"
 
1244
"          <BBB/>"
 
1245
"          <BBB/>"
 
1246
"          <CCC/>"
 
1247
"          <CCC/>"
 
1248
"          <CCC/>"
 
1249
"     </AAA>"
 
1250
},
 
1251
 
 
1252
{
 
1253
"//BBB[ position() = floor(last() div 2 + 0.5) or position() = ceiling(last() div 2 + 0.5) ]",
 
1254
"Select middle BBB element(s)",
 
1255
"     <AAA>"
 
1256
"          <BBB/>"
 
1257
"          <BBB/>"
 
1258
"          <BBB/>"
 
1259
"          <BBB/>"
 
1260
"          <BBB/>"
 
1261
"          <BBB/>"
 
1262
"          <BBB/>"
 
1263
"          <BBB/>"
 
1264
"          <CCC/>"
 
1265
"          <CCC/>"
 
1266
"          <CCC/>"
 
1267
"     </AAA>"
 
1268
},
 
1269
 
 
1270
{
 
1271
"//CCC[ position() = floor(last() div 2 + 0.5) or position() = ceiling(last() div 2 + 0.5) ]",
 
1272
"Select middle CCC element(s)",
 
1273
"     <AAA>"
 
1274
"          <BBB/>"
 
1275
"          <BBB/>"
 
1276
"          <BBB/>"
 
1277
"          <BBB/>"
 
1278
"          <BBB/>"
 
1279
"          <BBB/>"
 
1280
"          <BBB/>"
 
1281
"          <BBB/>"
 
1282
"          <CCC/>"
 
1283
"          <CCC/>"
 
1284
"          <CCC/>"
 
1285
"     </AAA>"
 
1286
}
 
1287
 
 
1288
}; //end
 
1289
 
 
1290