| <html><head><META http-equiv="Content-Type" content="text/html; charset=UTF-8"><title>Set difference, intersection and Union</title><link href="book.css" rel="stylesheet" type="text/css"><link href="../book.css" rel="stylesheet" type="text/css"><meta content="DocBook XSL Stylesheets V1.74.0" name="generator"><link rel="home" href="index.html" title="XPath 2.0 Processor User Manual"><link rel="up" href="ch02s03.html" title="How to use the XPath 2.0 grammar with PsychoPath"><link rel="prev" href="ch02s03s03.html" title="Axis steps"><link rel="next" href="ch02s03s05.html" title="Arithmetic Expressions"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="section" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="Set_difference.2C_intersection_and_Union"></a>Set difference, intersection and Union</h3></div></div></div><p>The expression E1 except E2 selects all nodes that are in E1 |
| unless they are also in E2. Both expressions must return sequences of |
| nodes. The results are returned in document order. For example, @* |
| except @note returns all attributes except the note attribute. The |
| expression E1 intersect E2 selects all nodes that are in both E1 and |
| E2. Both expressions must return sequences of nodes. The results are |
| returned in document order. The expression E1 union E2 selects all |
| nodes that are in either E1 or E2 or both. Both expressions must |
| return sequences of nodes. The results are returned in document order. |
| A complete example of the above expression would be as follows. |
| Consider an XML document which looks like this:</p><pre class="programlisting"><nodes> |
| <a> |
| <connecteda>A</connecteda> |
| <connecteda>B</connecteda> |
| <connecteda>C</connecteda> |
| </a> |
| <b> |
| <connectedb>B</connectedb> |
| <connectedb>C</connectedb> |
| <connectedb>D</connectedb> |
| </b> |
| </nodes> |
| </pre><p>Then an example of each of the expressions would be:</p><p><pre class="programlisting">data(/a/*) union data(/b/*)</pre></p><p> <span class="bold"><strong>result:</strong></span></p><div class="orderedlist"><ol type="1"><li><p>xs:string: A</p></li><li><p>xs:string: B</p></li><li><p>xs:string: C</p></li><li><p>xs:string: D</p></li></ol></div><p><pre class="programlisting">data(/a/*) intersect data(/b/*)</pre></p><p> <span class="bold"><strong>result:</strong></span></p><div class="orderedlist"><ol type="1"><li><p>xs:string: B</p></li><li><p>xs:string: C</p></li></ol></div><p><pre class="programlisting">data(/a/*) except data(/b/*)</pre></p><p> <span class="bold"><strong>result:</strong></span></p><div class="orderedlist"><ol type="1"><li><p>xs:string: D</p></li></ol></div></div></body></html> |