Dziś na forum CodeGuru.pl, które od czasu do czasu przeglądam pojawił się ciekawy problem, stworzenia listy województw i miast, które do nich należą(link). Stwierdziłem, iż jest to ciekawy temat, aby poćwiczyć troszkę XSLT. Dodatkowo taka lista może być kiedyś w jakimś projekcie przydatna.
Plik z listą można ściągnąć tu. Poniżej prezentuję transformatę XSLT jakby, ktoś chciał na nią zerknąć. Nie jest dziełem sztuki, gdyż pisałem ją raczej jako narzędzie do osiągnięcia celu a nie tak, aby wyszło dzieło sztuki.

    1 xml version=1.0 encoding=utf-8?>

    2 

    3 <xsl:stylesheet version=1.0

    4     xmlns:xsl=http://www.w3.org/1999/XSL/Transform

    5     xmlns:fn=http://www.w3.org/2005/02/xpath-functions

    6     xmlns:x=http://www.w3.org/1999/xhtml>

    7     <xsl:output media-type=text/xml indent=yes/>

    8 

    9     <xsl:template match=/>

   10         <xsl:element name=wojewodztwa>

   11             <xsl:attribute name=zródło>

   12                 <xsl:text>http://pl.wikipedia.org/wiki/Miasta_w_Polscexsl:text>

   13             xsl:attribute>

   14             <xsl:apply-templates select=/x:html/x:body/x:div/x:div[1]/x:div/x:div/x:ul />

   15         xsl:element>

   16     xsl:template>

   17 

   18     <xsl:template match=/x:html/x:body/x:div/x:div[1]/x:div/x:div/x:ul>

   19         <xsl:for-each select=x:li>

   20             <xsl:element name=wojewodztwo>

   21                 <xsl:attribute name=nazwa>

   22                     <xsl:value-of select=substring-after(./x:a/@title,’ ‘) />

   23                 xsl:attribute>

   24                 <xsl:variable name=skrot select=substring-before(string(.),’ ‘) />

   25                 <xsl:attribute name=skrót>

   26                     <xsl:value-of select=$skrot />

   27                 xsl:attribute>

   28                 <xsl:call-template name=miasta>

   29                     <xsl:with-param name=skrot select=$skrot />

   30                 xsl:call-template>

   31             xsl:element>           

   32         xsl:for-each>

   33     xsl:template>

   34 

   35     <xsl:template name=miasta>

   36         <xsl:param name=skrot />

   37         <xsl:for-each select=../../x:table/x:tr/x:td/x:table/x:tr/*/*/*>

   38             <xsl:if test=contains(string(.),concat(‘(‘,$skrot,’)’))>

   39                 <xsl:element name=miasto>

   40                     <xsl:value-of select=normalize-space(substring-before(.,'(‘))/>

   41                 xsl:element>

   42             xsl:if>

   43         xsl:for-each>

   44     xsl:template>

   45 xsl:stylesheet>

Źródłem miast jest stronka znajdująca się na wiki i aby wszystko było zgodnie z jej licencją publikuję link do źródłowego artykułu http://pl.wikipedia.org/wiki/Miasta_w_Polsce oraz historią. Z tego co wyczytałem, to wszystkie wymogi, aby móc z niej korzystać.