Outils pour utilisateurs

Outils du site


convertir_une_liste_dans_une_page_html_en_tableau_openoffice

Convertir une liste html en tableau OpenOffice

Situation

Une page html vous affiche un tableau de valeurs organisé sous forme liste html. Vous souhaitez transférer ce tableau dans une feuille de calcul OpenOffice.

Si le tableau original était un tableau html, un simple copier-coller ferait l'affaire. Mais ce n'est pas le cas, il faut donc effectuer une transformation plus élaborée.

Le problème

Il existe des bibliothèques de transformation capables de déduire l'organisation d'un structure de données et d'autres bibliothèques capables de la convertir vers une autre structure, un autre format. Mais rien ne vous garantit que ces bibliothèques seront opérantes dans le cas qui vous intéresse.

Nous allons donc étudier un cas concret. L'intérêt est de montrer quelques outils utilisables pour effectuer cette transformation de manière semi-automatique. L'objectif est de donner les éléments de solution permettant de traiter tout cas particulier que vous pourriez rencontrer.

La solution

La solution présentée ne prétend être optimale. Elle n'a d'autre valeur qu'illustrative. Il s'agit d'un vote dans une assemblée parlementaire du Conseil de l'Europe, telle que diffusée sur le site officiel de cette instance.

La structure de départ simplifiée est la suivante : <ol><li><span>vote</span><a>Membre></a><span>Code pays</span><span>Groupe politique</span>. On le voit, chaque champ n'est pas représenté par le même élément html : tantôt un span, tantôt un a.

Sélectionner les données composant le tableau

  1. dans Firefox, clic-droit sur la première ligne de la table de données > inspecter l'élément
  2. rechercher la balise d'ouverture de la liste (ul ou ol)
  3. cliquer sur la balise > Copier outerHTML (vous disposer des données composant la table dans le presse-papier)
  4. remplacer le contenu du bloc de gauche par le contenu du presse-papier
  5. adapter le bloc de droite (XSLT) à la transformation souhaitée (voir listing plus bas)
  6. appliquer la transformation et boucler sur l'étape précédente jusqu'à satisfaction
  7. dans le bloc inférieur (résultat), copier le tableau html ainsi obtenu
  8. le coller dans une feuille de calcul OpenOffice1)
  9. l'encodage html de départ n'étant pas accessible (injection de présentation dans le contenu), il faut retraiter les votes
    1. sélectionner la colonne Vote
    2. appeler l'outil recherche-remplace (^H)
      1. s'assurer que les expressions régulières2) sont acceptées (Autres options > Expression régulières)
      2. éliminer l'espace et le tiret final
      3. rechercher :
        ^(.*)\ -
      4. remplacer par :
        $1
      5. tout remplacer

À ce stade, vous disposez d'un tableau prêt à être utilisé, manipulé et exporté.

Exemple de feuille de style XSLT

Dans l'exemple traité, la feuille suivante a été utilisée :

<?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>
  <body>
  <h1>Vote de la résolution</h1>
  <h2>Résultats du vote</h2>
    <table border="1">
      <tr bgcolor="#9acd32">
        <th style="text-align:left">Vote</th>
        <th style="text-align:left">Pays</th>
        <th style="text-align:left">Groupe</th>
        <th style="text-align:left">Membre</th>
      </tr>
      <xsl:for-each select="ul/li">
      <tr>
        <td><xsl:value-of select="span"/></td>
        <td><xsl:value-of select="span[2]"/></td>
        <td><xsl:value-of select="span[3]"/></td>
        <td><xsl:value-of select="a"/></td>
      </tr>
      </xsl:for-each>
    </table>
  </body>
  </html>
</xsl:template>
</xsl:stylesheet>

Variante de récupération

Pour de multiples raisons, la technique d'extraction initiale des données via l'inspecteur peut ne pas fonctionner. Dans ce cas, il suffit de récupérer le code source de la page (^U) dans une autre page.

Je vous recommande de copier-coller le contenu de la page3) dans un bon éditeur syntaxique4) où l'on pourra reformater le contenu et extraire l'élément englobant les données voulues, de manière fiable, sans tâtonner sur le parenthésage.

Améliorations possibles

La procédure présentée ci-avant peut être largement améliorée, en fonction du contexte d'utilisation.

Si la page html est elle-même le résultat d'une génération automatique et si l'on doit fréquemment faire ce type d'extraction des données, on pourra :

  • Appliquer la transformation à l'intégralité de la page. On ne s'enquiquine à sélectionner l'élément. On peut, selon le niveau d'automatisation voulu, récupérer l'intégralité du code de la page (^U) ou fournir directement l'url de la page. Les interfaces utilisatrices de processeurs XSLT savent traiter les deux cas.
  • Rendre la feuille de style XSLT plus facile à adapter, en adoptant une programmation déclarative.
  • Effecteur toutes les opérations de formatage et de nettoyage des données via XSLT. Ainsi le tableau que l'on récupère dans Calc est prêt à être exploité.

Sauf cas particulier, on conservera une transformation interactive permettant de s'assurer que la feuille de style XSLT est toujours valable. En effet, l'éditeur du site web original ne prend aucun engagement de stabilité de sa structure de page. Qui sait, il finira peut-être par produire de vrais tableaux, comme le recommande, depuis des lustres, les règles de bons usages de html et comme l'exigent les normes d'accessibilité !

Traitement d'un fichier volumineux

Si le fichier à traiter est petit, l'outil en ligne peut suffire à réaliser le traitement. En pratique, il sert plutôt à mettre au point la feuille de style et à s'assurer que le fichier d'entrée est propre.

Pour ce type de petite transformation, un fichier volumineux pourra être facilement traité par un processeur xslt courant, par exemple xsltproc5).

La marche à suivre est simple :

  1. mettre le contenu à traiter dans un fichier xml, par exemple source.xml
    • on s'assure qu'on y applique tous les prétraitements identifiés sur l'outil de test
  2. copier-coller la feuille de style dans un fichier xsl, par exemple transform.xsl
  3. lancer la commande xsltproc
    $ xsltproc -o sortie.html transform.xsl source.xml

Le fichier sortie.html contiendra le résultat de la transformation.

1)
OpenOffice sait faire tout seul puisqu'il reconnaît bien un tableau.
2)
Testez vos expressions régulières avant de les appliquer.
3)
Attention, il ne faut pas enregistrer la page source, mais bien copier/coller son contenu !
4)
Pour ce type de manipulation simple, j'utilise l'éditeur d'Aptana Studio 3, une surcouche d'Eclipse.
5)
Si elle n'est pas disponible sur votre système, un simple “sudo apt install xsltproc” réglera le problème.
convertir_une_liste_dans_une_page_html_en_tableau_openoffice.txt · Dernière modification : 2020/11/24 23:52 de 127.0.0.1