Relisez d'abord le post précédent comme introduction.

Voici le script pour Windows stations2mm.cmd :

@echo off
xsltproc -o %~dpn1.sql %~dpn0.xslt %1 || goto :EOF
if exist velib-poi.db del velib-poi.db
echo .q| sqlite3 -batch -init %~dpn1.sql velib-poi.db

Pour le lancer :

C:\Users\Moi\Documents\Vélib'>stations2mm stations.xml

Voici la nouvelle feuille de style stations2mm.xslt. Le nombre de lignes a doublé simplement pour l'échappement correct des apostrophes.

<?xml version="1.0" encoding="UTF-8"?>
<!-- stations2mm.xslt -->
<!-- Copyright (c) 2007 Olivier Mengué  http://o.mengue.free.fr/ -->
<!--
  Maemo Mapper POI format: http://eko.one.pl/index.php?page=Nokia770_software#Details
-->
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
  <xsl:output method="text" encoding="UTF-8" />
  <xsl:strip-space elements="*"/>
  <xsl:template match="/markers">-- Script SQLite pour construire une base POI des stations Vélib pour Maemo
-- Mapper http://gnuite.com:8080/nokia770/maemo-mapper/ (Nokia 770, N800).
-- See http://eko.one.pl/index.php?page=Nokia770_software#Details
--
-- Créé avec stations2mm.xslt (http://o.mengue.free.fr/)
--
-- Pour céer le fichier:
--  echo .q | sqlite3 -batch -init stations.sql poi.db

PRAGMA encoding = "UTF-8";

CREATE TABLE IF NOT EXISTS category (cat_id INTEGER PRIMARY KEY, label TEXT NOT NULL, desc TEXT, enabled INTEGER NOT NULL);
CREATE TABLE IF NOT EXISTS poi (poi_id INTEGER PRIMARY KEY, lat REAL NOT NULL, lon REAL NOT NULL, label TEXT NOT NULL, desc TEXT, cat_id INTEGER NOT NULL);
CREATE INDEX IF NOT EXISTS poi_idx_latlon ON poi (lat ASC, lon ASC);

-- Placez 'Velib.jpg' dans un sous-répertoire 'poi' de votre dépôt de cartes
-- Pas d'accent dans label
INSERT INTO category (cat_id, label, desc, enabled) VALUES (30001, 'Velib', 'Station Vélib''', 1);
INSERT INTO category (cat_id, label, desc, enabled) VALUES (30002, 'Velib2', 'Station Vélib'' corrigée', 1);
INSERT INTO category (cat_id, label, desc, enabled) VALUES (30003, 'Velib3', 'Station Vélib'' validée', 1);
INSERT INTO category (cat_id, label, desc, enabled) VALUES (30004, 'Velib4', 'Station Vélib'' erronée', 1);

<!--
Ignore les stations dont les coordonnées ne sont pas définies
  lat=27.1409733745, lng=-3.40456062425
-->
<xsl:for-each select="marker[@lat!='27.1409733745']">
  <xsl:sort select="@lat" data-type="number"/>
  <xsl:sort select="@lng" data-type="number"/><!--
  -->INSERT INTO poi (poi_id, lat, lon, label, desc, cat_id) VALUES (<xsl:value-of select="30000+position()"/>, <xsl:value-of select="@lat"/>, <xsl:value-of select="@lng"/>, '<xsl:value-of select="@number"/>', '<xsl:call-template name="globalReplace">
      <xsl:with-param name="input" select="@address"/>
      <xsl:with-param name="search" select="&quot;'&quot;"/>
      <xsl:with-param name="replacement" select="&quot;''&quot;"/>
    </xsl:call-template>', 30001);
</xsl:for-each>
  </xsl:template>

  <!-- Voir http://www.xml.com/pub/a/2002/06/05/transforming.html -->
  <xsl:template name="globalReplace">
    <xsl:param name="input"/>
    <xsl:param name="search"/>
    <xsl:param name="replacement"/>
    <xsl:choose>
      <xsl:when test="contains($input, $search)">
        <xsl:value-of select=
          "concat(substring-before($input, $search),
                 $replacement)"/>
        <xsl:call-template name="globalReplace">
          <xsl:with-param name="input"
               select="substring-after($input, $search)"/>
          <xsl:with-param name="search" select="$search"/>
          <xsl:with-param name="replacement"
               select="$replacement"/>
        </xsl:call-template>
      </xsl:when>
      <xsl:otherwise>
        <xsl:value-of select="$input"/>
      </xsl:otherwise>
    </xsl:choose>
  </xsl:template>

</xsl:stylesheet>