Outils pour utilisateurs

Outils du site


convertir_une_liste_dans_une_page_html_en_tableau_openoffice
no way to compare when less than two revisions

Différences

Ci-dessous, les différences entre deux révisions de la page.


convertir_une_liste_dans_une_page_html_en_tableau_openoffice [2020/11/24 23:52] (Version actuelle) – créée - modification externe 127.0.0.1
Ligne 1: Ligne 1:
 +====== 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 ====
 +  - dans Firefox, clic-droit sur la première ligne de la table de données > inspecter l'élément
 +  - rechercher la balise d'ouverture de la liste (ul ou ol)
 +  - cliquer sur la balise > Copier outerHTML (vous disposer des données composant la table dans le presse-papier)
 +  - ouvrir un éditeur interactif XSLT, par exemple : https://www.w3schools.com/xml/tryxslt.asp?xmlfile=cdcatalog&xsltfile=cdcatalog
 +  - remplacer le contenu du bloc de gauche par le contenu du presse-papier
 +  - adapter le bloc de droite (XSLT) à la transformation souhaitée (voir listing plus bas)
 +  - appliquer la transformation et boucler sur l'étape précédente jusqu'à satisfaction
 +  - dans le bloc inférieur (résultat), copier le tableau html ainsi obtenu
 +  - le coller dans une feuille de calcul OpenOffice((OpenOffice sait faire tout seul puisqu'il reconnaît bien un tableau.))
 +  - l'encodage html de départ n'étant pas accessible (injection de présentation dans le contenu), il faut retraiter les votes
 +    - sélectionner la colonne Vote
 +    - appeler l'outil recherche-remplace (^H)
 +      - s'assurer que les expressions régulières(([[https://regex101.com/|Testez vos expressions régulières]] avant de les appliquer.)) sont acceptées (Autres options > Expression régulières)
 +      - éliminer l'espace et le tiret final
 +      - rechercher : <code>^(.*)\ -</code>
 +      - remplacer par : <code>$1</code>
 +      - 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 :
 +<code>
 +<?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>
 +</code>
 +==== 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 page((Attention, il ne faut pas enregistrer la page source, mais bien copier/coller son contenu !)) dans un bon __éditeur syntaxique__((Pour ce type de manipulation simple, j'utilise l'éditeur d'Aptana Studio 3, une surcouche d'Eclipse.)) 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 //xsltproc//((Si elle n'est pas disponible sur votre système, un simple "sudo apt install xsltproc" réglera le problème.)).
 +
 +La marche à suivre est simple :
 +  - 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
 +  - copier-coller la feuille de style dans un fichier xsl, par exemple //transform.xsl//
 +  - lancer la commande xsltproc<code>$ xsltproc -o sortie.html transform.xsl source.xml</code>
 +Le fichier //sortie.html// contiendra le résultat de la transformation.
convertir_une_liste_dans_une_page_html_en_tableau_openoffice.txt · Dernière modification : 2020/11/24 23:52 de 127.0.0.1