Skip to main content

LINQ To XML Samples - Transform


Create a table of customers

Generate html with a list of customers that is numbered

Public Sub XLinq77()
    Dim doc = XDocument.Load(dataPath + "nw_customers.xml")

    Dim header() As XElement = {<th>#</th>, _
                              <th>customer id</th>, _
                              <th>contact name</th>}
    Dim rows = _
        From customer In doc...<Customers> _
        Select <tr><td><%= Increment() %></td><td><%= customer.@CustomerID %></td><td><%= customer.<ContactName>(0).Value %></td></tr>

    Dim html = <html><body><table><%= header %><%= rows %></table></body></html>
    Console.Write(html)
End Sub

Result:
<html>
  <body>
    <table>
      <th>#</th>
      <th>customer id</th>
      <th>contact name</th>
      <tr>
        <td>1</td>
        <td>ALFKI</td>
        <td>Maria Anders</td>
      </tr>
      <tr>
        <td>2</td>
        <td>ANATR</td>
        <td>Ana Trujillo</td>
      </tr>
      <tr>
        <td>3</td>
        <td>ANTON</td>
        <td>Antonio Moreno</td>
      </tr>
      <tr>
        <td>4</td>
        <td>AROUT</td>
        <td>Thomas Hardy</td>
      </tr>
      <tr>
        <td>5</td>
        <td>BERGS</td>
        <td>Christina Berglund</td>
      </tr>
      <tr>
        <td>6</td>
        <td>BLAUS</td>
        <td>Hanna Moos</td>
      </tr>
      <tr>
        <td>7</td>
        <td>BLONP</td>
        <td>Frédérique Citeaux</td>
      </tr>
      <tr>
        <td>8</td>
        <td>BOLID</td>
        <td>Martín Sommer</td>
      </tr>
      <tr>
        <td>9</td>
        <td>BONAP</td>
        <td>Laurence Lebihan</td>
      </tr>
      <tr>
        <td>10</td>
        <td>BOTTM</td>
        <td>Elizabeth Lincoln</td>
      </tr>
      <tr>
        <td>11</td>
        <td>BSBEV</td>
        <td>Victoria Ashworth</td>
      </tr>
      <tr>
        <td>12</td>
        <td>CACTU</td>
        <td>Patricio Simpson</td>
      </tr>
      <tr>
        <td>13</td>
        <td>CENTC</td>
        <td>Francisco Chang</td>
      </tr>
      <tr>
        <td>14</td>
        <td>CHOPS</td>
        <td>Yang Wang</td>
      </tr>
      <tr>
        <td>15</td>
        <td>COMMI</td>
        <td>Pedro Afonso</td>
      </tr>
      <tr>
        <td>16</td>
        <td>CONSH</td>
        <td>Elizabeth Brown</td>
      </tr>
      <tr>
        <td>17</td>
        <td>DRACD</td>
        <td>Sven Ottlieb</td>
      </tr>
      <tr>
        <td>18</td>
        <td>DUMON</td>
        <td>Janine Labrune</td>
      </tr>
      <tr>
        <td>19</td>
        <td>EASTC</td>
        <td>Ann Devon</td>
      </tr>
      <tr>
        <td>20</td>
        <td>ERNSH</td>
        <td>Roland Mendel</td>
      </tr>
      <tr>
        <td>21</td>
        <td>FAMIA</td>
        <td>Aria Cruz</td>
      </tr>
      <tr>
        <td>22</td>
        <td>FISSA</td>
        <td>Diego Roel</td>
      </tr>
      <tr>
        <td>23</td>
        <td>FOLIG</td>
        <td>Martine Rancé</td>
      </tr>
      <tr>
        <td>24</td>
        <td>FOLKO</td>
        <td>Maria Larsson</td>
      </tr>
      <tr>
        <td>25</td>
        <td>FRANK</td>
        <td>Peter Franken</td>
      </tr>
      <tr>
        <td>26</td>
        <td>FRANR</td>
        <td>Carine Schmitt</td>
      </tr>
      <tr>
        <td>27</td>
        <td>FRANS</td>
        <td>Paolo Accorti</td>
      </tr>
      <tr>
        <td>28</td>
        <td>FURIB</td>
        <td>Lino Rodriguez</td>
      </tr>
      <tr>
        <td>29</td>
        <td>GALED</td>
        <td>Eduardo Saavedra</td>
      </tr>
      <tr>
        <td>30</td>
        <td>GODOS</td>
        <td>José Pedro Freyre</td>
      </tr>
      <tr>
        <td>31</td>
        <td>GOURL</td>
        <td>André Fonseca</td>
      </tr>
      <tr>
        <td>32</td>
        <td>GREAL</td>
        <td>Howard Snyder</td>
      </tr>
      <tr>
        <td>33</td>
        <td>GROSR</td>
        <td>Manuel Pereira</td>
      </tr>
      <tr>
        <td>34</td>
        <td>HANAR</td>
        <td>Mario Pontes</td>
      </tr>
      <tr>
        <td>35</td>
        <td>HILAA</td>
        <td>Carlos Hernández</td>
      </tr>
      <tr>
        <td>36</td>
        <td>HUNGC</td>
        <td>Yoshi Latimer</td>
      </tr>
      <tr>
        <td>37</td>
        <td>HUNGO</td>
        <td>Patricia McKenna</td>
      </tr>
      <tr>
        <td>38</td>
        <td>ISLAT</td>
        <td>Helen Bennett</td>
      </tr>
      <tr>
        <td>39</td>
        <td>KOENE</td>
        <td>Philip Cramer</td>
      </tr>
      <tr>
        <td>40</td>
        <td>LACOR</td>
        <td>Daniel Tonini</td>
      </tr>
      <tr>
        <td>41</td>
        <td>LAMAI</td>
        <td>Annette Roulet</td>
      </tr>
      <tr>
        <td>42</td>
        <td>LAUGB</td>
        <td>Yoshi Tannamuri</td>
      </tr>
      <tr>
        <td>43</td>
        <td>LAZYK</td>
        <td>John Steel</td>
      </tr>
      <tr>
        <td>44</td>
        <td>LEHMS</td>
        <td>Renate Messner</td>
      </tr>
      <tr>
        <td>45</td>
        <td>LETSS</td>
        <td>Jaime Yorres</td>
      </tr>
      <tr>
        <td>46</td>
        <td>LILAS</td>
        <td>Carlos González</td>
      </tr>
      <tr>
        <td>47</td>
        <td>LINOD</td>
        <td>Felipe Izquierdo</td>
      </tr>
      <tr>
        <td>48</td>
        <td>LONEP</td>
        <td>Fran Wilson</td>
      </tr>
      <tr>
        <td>49</td>
        <td>MAGAA</td>
        <td>Giovanni Rovelli</td>
      </tr>
      <tr>
        <td>50</td>
        <td>MAISD</td>
        <td>Catherine Dewey</td>
      </tr>
      <tr>
        <td>51</td>
        <td>MEREP</td>
        <td>Jean Fresnière</td>
      </tr>
      <tr>
        <td>52</td>
        <td>MORGK</td>
        <td>Alexander Feuer</td>
      </tr>
      <tr>
        <td>53</td>
        <td>NORTS</td>
        <td>Simon Crowther</td>
      </tr>
      <tr>
        <td>54</td>
        <td>OCEAN</td>
        <td>Yvonne Moncada</td>
      </tr>
      <tr>
        <td>55</td>
        <td>OLDWO</td>
        <td>Rene Phillips</td>
      </tr>
      <tr>
        <td>56</td>
        <td>OTTIK</td>
        <td>Henriette Pfalzheim</td>
      </tr>
      <tr>
        <td>57</td>
        <td>PARIS</td>
        <td>Marie Bertrand</td>
      </tr>
      <tr>
        <td>58</td>
        <td>PERIC</td>
        <td>Guillermo Fernández</td>
      </tr>
      <tr>
        <td>59</td>
        <td>PICCO</td>
        <td>Georg Pipps</td>
      </tr>
      <tr>
        <td>60</td>
        <td>PRINI</td>
        <td>Isabel de Castro</td>
      </tr>
      <tr>
        <td>61</td>
        <td>QUEDE</td>
        <td>Bernardo Batista</td>
      </tr>
      <tr>
        <td>62</td>
        <td>QUEEN</td>
        <td>Lúcia Carvalho</td>
      </tr>
      <tr>
        <td>63</td>
        <td>QUICK</td>
        <td>Horst Kloss</td>
      </tr>
      <tr>
        <td>64</td>
        <td>RANCH</td>
        <td>Sergio Gutiérrez</td>
      </tr>
      <tr>
        <td>65</td>
        <td>RATTC</td>
        <td>Paula Wilson</td>
      </tr>
      <tr>
        <td>66</td>
        <td>REGGC</td>
        <td>Maurizio Moroni</td>
      </tr>
      <tr>
        <td>67</td>
        <td>RICAR</td>
        <td>Janete Limeira</td>
      </tr>
      <tr>
        <td>68</td>
        <td>RICSU</td>
        <td>Michael Holz</td>
      </tr>
      <tr>
        <td>69</td>
        <td>ROMEY</td>
        <td>Alejandra Camino</td>
      </tr>
      <tr>
        <td>70</td>
        <td>SANTG</td>
        <td>Jonas Bergulfsen</td>
      </tr>
      <tr>
        <td>71</td>
        <td>SAVEA</td>
        <td>Jose Pavarotti</td>
      </tr>
      <tr>
        <td>72</td>
        <td>SEVES</td>
        <td>Hari Kumar</td>
      </tr>
      <tr>
        <td>73</td>
        <td>SIMOB</td>
        <td>Jytte Petersen</td>
      </tr>
      <tr>
        <td>74</td>
        <td>SPECD</td>
        <td>Dominique Perrier</td>
      </tr>
      <tr>
        <td>75</td>
        <td>SPLIR</td>
        <td>Art Braunschweiger</td>
      </tr>
      <tr>
        <td>76</td>
        <td>SUPRD</td>
        <td>Pascale Cartrain</td>
      </tr>
      <tr>
        <td>77</td>
        <td>THEBI</td>
        <td>Liz Nixon</td>
      </tr>
      <tr>
        <td>78</td>
        <td>THECR</td>
        <td>Liu Wong</td>
      </tr>
      <tr>
        <td>79</td>
        <td>TOMSP</td>
        <td>Karin Josephs</td>
      </tr>
      <tr>
        <td>80</td>
        <td>TORTU</td>
        <td>Miguel Angel Paolino</td>
      </tr>
      <tr>
        <td>81</td>
        <td>TRADH</td>
        <td>Anabela Domingues</td>
      </tr>
      <tr>
        <td>82</td>
        <td>TRAIH</td>
        <td>Helvetius Nagy</td>
      </tr>
      <tr>
        <td>83</td>
        <td>VAFFE</td>
        <td>Palle Ibsen</td>
      </tr>
      <tr>
        <td>84</td>
        <td>VICTE</td>
        <td>Mary Saveley</td>
      </tr>
      <tr>
        <td>85</td>
        <td>VINET</td>
        <td>Paul Henriot</td>
      </tr>
      <tr>
        <td>86</td>
        <td>WANDK</td>
        <td>Rita Müller</td>
      </tr>
      <tr>
        <td>87</td>
        <td>WARTH</td>
        <td>Pirkko Koskitalo</td>
      </tr>
      <tr>
        <td>88</td>
        <td>WELLI</td>
        <td>Paula Parente</td>
      </tr>
      <tr>
        <td>89</td>
        <td>WHITC</td>
        <td>Karl Jablonski</td>
      </tr>
      <tr>
        <td>90</td>
        <td>WILMK</td>
        <td>Matti Karttunen</td>
      </tr>
      <tr>
        <td>91</td>
        <td>WOLZA</td>
        <td>Zbyszek Piestrzeniewicz</td>
      </tr>
    </table>
  </body>
</html>


Create HTML tables of books

Generate HTML tables of books by authors

Public Sub XLinq78()
    Dim doc = XDocument.Load(dataPath + "bib.xml")
    Dim content = From b In doc...<book> _
                  From a In b.<author> _
                  Group b By Key = a.<first>.Value & " " & a.<last>.Value Into authorGroup = Group _
                  Select <p><%= "Author: " & Key %><%= GetBooksTable(authorGroup) %></p>

    Dim result = <html><body><%= content %></body></html>

    Console.WriteLine(result)
End Sub


' Sub GetBooksTable code not found

Result:
<html>
  <body>
    <p>Author: W. Stevens<table><th>Title</th><th>Year</th><tr><td /><td>1994</td></tr><tr><td /><td>1992</td></tr></table></p>
    <p>Author: Peter Golde<table><th>Title</th><th>Year</th><tr><td /><td>1992</td></tr><tr><td /><td>2003</td></tr></table></p>
    <p>Author: Serge Abiteboul<table><th>Title</th><th>Year</th><tr><td /><td>2000</td></tr></table></p>
    <p>Author: Peter Buneman<table><th>Title</th><th>Year</th><tr><td /><td>2000</td></tr></table></p>
    <p>Author: Dan Suciu<table><th>Title</th><th>Year</th><tr><td /><td>2000</td></tr></table></p>
    <p>Author: Anders Hejlsberg<table><th>Title</th><th>Year</th><tr><td /><td>1999</td></tr><tr><td /><td>2003</td></tr></table></p>
    <p>Author: Scott Wiltamuth<table><th>Title</th><th>Year</th><tr><td /><td>2003</td></tr></table></p>
  </body>
</html>