Using xsl to put xml data into a table

Here should go questions about transforming XML with XSLT and FOP.
FoxMtRX
Posts: 1
Joined: Fri Sep 28, 2012 6:32 am

Using xsl to put xml data into a table

Post by FoxMtRX »

hi guys, i'm new here, getting into the basics of xsl, and i was wondering if anyone could help me out. I trying to get the data from an xml file and display it in a table.

this is the xml data:

Code: Select all

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE internetUsage SYSTEM "HomeInternetUsage2011Census.dtd">
<internetUsage src="Australian Bureau of Statistics 81460DO004_201011 Household Use of Information Technology, Australia, 2010-11">
<descriptions group="title">
<usage type='1'>Persons who accessed the internet at home</usage>
<usage type='2'>Accessing government services</usage>
<usage type='3'>Buying or selling goods or services</usage>
<usage type='4'>Creating online content</usage>
<usage type='5'>Downloading video or music</usage>
<usage type='6'>Educational purposes</usage>
<usage type='7'>Emailing</usage>
<usage type='8'>Listening to music or watching videos/movies online</usage>
<usage type='9'>Paying bills online or online banking</usage>
<usage type='10'>Research or news and general browsing</usage>
<usage type='11'>Social networking and online gaming</usage>
<usage type='12'>Voice or video calls over the internet</usage>
</descriptions>
<descriptions group="units">
<usage type='1'>1000s</usage>
<usage type='2'>%</usage>
<usage type='3'>%</usage>
<usage type='4'>%</usage>
<usage type='5'>%</usage>
<usage type='6'>%</usage>
<usage type='7'>%</usage>
<usage type='8'>%</usage>
<usage type='9'>%</usage>
<usage type='10'>%</usage>
<usage type='11'>%</usage>
<usage type='12'>%</usage>
</descriptions>
<ageGroup group="15-17">
<usage type='1'>778</usage>
<usage type='2'>23</usage>
<usage type='3'>24</usage>
<usage type='4'>54</usage>
<usage type='5'>65</usage>
<usage type='6'>78</usage>
<usage type='7'>79</usage>
<usage type='8'>83</usage>
<usage type='9'>15</usage>
<usage type='10'>85</usage>
<usage type='11'>88</usage>
<usage type='12'>22</usage>
</ageGroup>
<ageGroup group="18-24">
<usage type='1'>1910</usage>
<usage type='2'>44</usage>
<usage type='3'>46</usage>
<usage type='4'>57</usage>
<usage type='5'>60</usage>
<usage type='6'>61</usage>
<usage type='7'>93</usage>
<usage type='8'>81</usage>
<usage type='9'>66</usage>
<usage type='10'>89</usage>
<usage type='11'>86</usage>
<usage type='12'>27</usage>
</ageGroup>
<ageGroup group="25-34">
<usage type='1'>2820</usage>
<usage type='2'>53</usage>
<usage type='3'>55</usage>
<usage type='4'>50</usage>
<usage type='5'>50</usage>
<usage type='6'>50</usage>
<usage type='7'>93</usage>
<usage type='8'>68</usage>
<usage type='9'>78</usage>
<usage type='10'>87</usage>
<usage type='11'>75</usage>
<usage type='12'>33</usage>
</ageGroup>
<ageGroup group="35-44">
<usage type='1'>2691</usage>
<usage type='2'>53</usage>
<usage type='3'>51</usage>
<usage type='4'>38</usage>
<usage type='5'>36</usage>
<usage type='6'>51</usage>
<usage type='7'>91</usage>
<usage type='8'>51</usage>
<usage type='9'>71</usage>
<usage type='10'>89</usage>
<usage type='11'>53</usage>
<usage type='12'>29</usage>
</ageGroup>
<ageGroup group="45-54">
<usage type='1'>2411</usage>
<usage type='2'>48</usage>
<usage type='3'>44</usage>
<usage type='4'>31</usage>
<usage type='5'>23</usage>
<usage type='6'>44</usage>
<usage type='7'>90</usage>
<usage type='8'>39</usage>
<usage type='9'>64</usage>
<usage type='10'>88</usage>
<usage type='11'>37</usage>
<usage type='12'>26</usage>
</ageGroup>
<ageGroup group="55-64">
<usage type='1'>1717</usage>
<usage type='2'>46</usage>
<usage type='3'>38</usage>
<usage type='4'>28</usage>
<usage type='5'>16</usage>
<usage type='6'>37</usage>
<usage type='7'>89</usage>
<usage type='8'>27</usage>
<usage type='9'>60</usage>
<usage type='10'>86</usage>
<usage type='11'>28</usage>
<usage type='12'>25</usage>
</ageGroup>
<ageGroup group="65-">
<usage type='1'>1029</usage>
<usage type='2'>35</usage>
<usage type='3'>26</usage>
<usage type='4'>23</usage>
<usage type='5'>9</usage>
<usage type='6'>24</usage>
<usage type='7'>91</usage>
<usage type='8'>19</usage>
<usage type='9'>43</usage>
<usage type='10'>81</usage>
<usage type='11'>17</usage>
<usage type='12'>25</usage>
</ageGroup>
<gender group="male">
<usage type='1'>6663</usage>
<usage type='2'>47</usage>
<usage type='3'>47</usage>
<usage type='4'>37</usage>
<usage type='5'>40</usage>
<usage type='6'>47</usage>
<usage type='7'>89</usage>
<usage type='8'>56</usage>
<usage type='9'>63</usage>
<usage type='10'>88</usage>
<usage type='11'>51</usage>
<usage type='12'>29</usage>
</gender>
<gender group="female">
<usage type='1'>6693</usage>
<usage type='2'>47</usage>
<usage type='3'>43</usage>
<usage type='4'>44</usage>
<usage type='5'>34</usage>
<usage type='6'>51</usage>
<usage type='7'>93</usage>
<usage type='8'>50</usage>
<usage type='9'>65</usage>
<usage type='10'>87</usage>
<usage type='11'>59</usage>
<usage type='12'>27</usage>
</gender>
<employment group="employed">
<usage type='1'>9825</usage>
<usage type='2'>50</usage>
<usage type='3'>49</usage>
<usage type='4'>42</usage>
<usage type='5'>39</usage>
<usage type='6'>50</usage>
<usage type='7'>91</usage>
<usage type='8'>55</usage>
<usage type='9'>70</usage>
<usage type='10'>88</usage>
<usage type='11'>57</usage>
<usage type='12'>29</usage>
</employment>
<employment group="unemployed">
<usage type='1'>3531</usage>
<usage type='2'>39</usage>
<usage type='3'>33</usage>
<usage type='4'>37</usage>
<usage type='5'>31</usage>
<usage type='6'>44</usage>
<usage type='7'>90</usage>
<usage type='8'>48</usage>
<usage type='9'>46</usage>
<usage type='10'>85</usage>
<usage type='11'>51</usage>
<usage type='12'>26</usage>
</employment>
<location group="urban">
<usage type='1'>11969</usage>
<usage type='2'>47</usage>
<usage type='3'>45</usage>
<usage type='4'>41</usage>
<usage type='5'>38</usage>
<usage type='6'>49</usage>
<usage type='7'>91</usage>
<usage type='8'>54</usage>
<usage type='9'>64</usage>
<usage type='10'>87</usage>
<usage type='11'>56</usage>
<usage type='12'>29</usage>
</location>
<location group="rural">
<usage type='1'>1387</usage>
<usage type='2'>47</usage>
<usage type='3'>43</usage>
<usage type='4'>36</usage>
<usage type='5'>27</usage>
<usage type='6'>45</usage>
<usage type='7'>88</usage>
<usage type='8'>40</usage>
<usage type='9'>59</usage>
<usage type='10'>86</usage>
<usage type='11'>46</usage>
<usage type='12'>21</usage>
</location>
</internetUsage>
I'd like to get an idea, or template from anyone that can help out. If any more data is needed, like the DTD, let me know. Thank you :)
adrian
Posts: 2879
Joined: Tue May 17, 2005 4:01 pm

Re: Using xsl to put xml data into a table

Post by adrian »

Hi,

You didn't mention what kind of table, so I'm assuming HTML.

Here's a "quick and dirty" XSLT (based on one of the Oxygen samples, 'personal.xsl') that generates an HTML table for your XML:

Code: Select all

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="/">
<html>
<xsl:element name="table">
<xsl:attribute name="border">2</xsl:attribute>
<tr>
<xsl:attribute name="color">#FFFFFF</xsl:attribute>
<xsl:attribute name="bgcolor">#336666</xsl:attribute>
<xsl:attribute name="align">center</xsl:attribute>
<xsl:for-each select="//(descriptions|ageGroup|gender|employment|location)">
<td>
<font name="Arial" size="3">
<b>
<xsl:value-of select="@group"/>
</b>
</font>
</td>
</xsl:for-each>
</tr>
<xsl:apply-templates/>
</xsl:element>
</html>
</xsl:template>
<xsl:template match="descriptions[1]//usage">
<xsl:variable name="type" select="@type"/>
<xsl:element name="tr">
<xsl:attribute name="align">center</xsl:attribute>
<xsl:for-each select="//(descriptions|ageGroup|gender|employment|location)">
<xsl:element name="td">
<font name="verdana" size="3">
<xsl:attribute name="width">120</xsl:attribute>
<i>
<xsl:value-of select="usage[@type=$type]//text()"/>
</i>
</font>
</xsl:element>
</xsl:for-each>
</xsl:element>
</xsl:template>
<xsl:template match="text()"/>
</xsl:stylesheet>
It's "quick and dirty" because it doesn't handle each type of column in particular, it processes all of them in the same way with the help of an "xsl:for-each".

Regards,
Adrian
Adrian Buza
<oXygen/> XML Editor, Schema Editor and XSLT Editor/Debugger
http://www.oxygenxml.com
Post Reply