Linuxgraphic.org : Les forums
https://www.linuxgraphic.org/forums/

Modifier le svg par programmation
https://www.linuxgraphic.org/forums/viewtopic.php?f=6&t=8122
Page 1 sur 1

Auteur:  jovial [ 07 Oct 2016, 15:07 ]
Sujet du message:  Modifier le svg par programmation

Bonjour

J'ai besoin de changer des valeurs d'attribut de balise d'un svg produit sur inkscape, à partir d'un script bash sur une centaine de fichier.
J'ai pas su le faire avec les fonction d'inkscape est ce que sauriez ou je puisse trouve de la ressource et exemple de code ou des outil xml qui me permette de le faire.

Pour le détail de ce je veux faire voir ici https://forum.ubuntu-fr.org/viewtopic.php?id=1997568

Auteur:  jazzynico [ 11 Oct 2016, 09:18 ]
Sujet du message:  Re: Modifier le svg par programmation

Bonjour Jovial,

La solution me semblant la plus naturelle serait d'utiliser XSLT. C'est ce que font les documentalistes d'Inkscape pour générer les tutoriels (l'original est en docbook, et la transformation permet d'obtenir des fichiers SVG - intégrés à l'application - et HTML - pour le site web).

En gros, il s'agit de définir un fichier XSLT qui contient toutes les transformations souhaitées, puis d'appliquer ce modèle à tous les fichiers d'un dossier avec (par exemple) la commande xsltproc (il me semble que cette commande permet de faire tout un dossier d'un coup, et de copier le résultat dans un dossier différent si besoin).
J'y regarde de plus près un peu plus tard si je trouve un peu de temps.

Bonne journée !

Auteur:  jazzynico [ 11 Oct 2016, 14:39 ]
Sujet du message:  Re: Modifier le svg par programmation

Bon, il a fallu que je m'y remette...

Voici un fichier modèle que devrait fonctionner pour ce cas :

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="node()|@*">
    <xsl:copy>
      <xsl:apply-templates select="node()|@*"/>
    </xsl:copy>
  </xsl:template>

  <xsl:template match="@id[.='stop4158']">
    <xsl:attribute name="style">
      <xsl:value-of select="'stop-color:#ff00b0;stop-opacity:1;'"/>
    </xsl:attribute>
  </xsl:template>

</xsl:stylesheet>


Il suffit ensuite d'exécuter xsltproc dans un bash en passant ce modèle en argument, et ce pour chaque fichier (dans cet exemple, on envoie le résultat dans le dossier test/) :

Code:
 for file in *.svg; do xsltproc --output ./test/$file  color_change.xsl $file; done


Si tous tes stops partagent le même identifiant, le modèle va tous les changer avec le style donné.

Voilà, en espérant que ça aide un peu.

Page 1 sur 1 Heures au format UTC + 1 heure [ Heure d’été ]
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
http://www.phpbb.com/