2010-01-18 4 views
0

Je suis complètement novice en la matière et essaie de comprendre comment faire quelque chose comme ceci:XSLT: Modifier les valeurs nom de l'élément et l'attribut

J'ai ce type de balises (beaucoup d'entre eux) dans un fichier XML

<ImageData src="whatever.tif"/> 

ce que je dois faire est tout d'abord les changer à une référence avec un numéro comme celui-ci:

<INCL.ELEMENT FILEREF="image0001.tif" TYPE="TIFF"/> 

de sorte que le nombre doit obtenir des zéros à gauche et le type doit être trouvé dans l'attribut src.

Quand tout cela a changé une liste de ces éléments doit également être ajouté au-dessus du xml comme celui-ci

<INCLUSIONS> 
    <INCL.ELEMENT FILEREF="image0001.tif" TYPE="TIFF"/> 
    <INCL.ELEMENT FILEREF="image0002.tif" TYPE="TIFF"/> 
    <INCL.ELEMENT FILEREF="image0003.tif" TYPE="TIFF"/> 
    <INCL.ELEMENT FILEREF="image0004.tif" TYPE="TIFF"/> 
    ... 
    <INCL.ELEMENT FILEREF="image0014.tif" TYPE="TIFF"/> 
</INCLUSIONS> 

Depuis que je suis nouveau à ce que je suis désemparés quant à où commencer.

+0

Quelques commentaires sur ma réponse aurait été agréable. – Filburt

Répondre

2

Cela devrait vous donner quelque chose à commencer par:

<?xml version="1.0" encoding="utf-8"?> 
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 
    <xsl:output method="xml"/> 

    <xsl:template match="/"> 
     <INCLUSIONS> 
      <xsl:apply-templates /> 
     </INCLUSIONS> 
    </xsl:template> 

    <xsl:template match="ImageData"> 
     <xsl:variable name="imagecount" select="count(preceding::ImageData) + 1" /> 
     <xsl:variable name="fileextension" select="substring-after(./@src, '.')"/> 
     <INCL.ELEMENT> 
      <xsl:attribute name="FILEREF"> 
       <xsl:value-of select="concat('image', format-number($imagecount, '0000'), '.', $fileextension)"/> 
      </xsl:attribute> 
      <xsl:attribute name="TYPE"> 
       <xsl:choose> 
        <xsl:when test="$fileextension='tif'">TIFF</xsl:when> 
        <xsl:otherwise>JPEG</xsl:otherwise> 
       </xsl:choose> 
      </xsl:attribute> 
     </INCL.ELEMENT> 
    </xsl:template> 

+0

'substring-after (@src, '.')' Est quelque peu cassant. 'substring (@src, string-length (@src) - 3, 3)' est meilleur. – Tomalak

+0

Hhhmm ... mais cela échouerait .jpeg et autres. – Filburt

+0

Pas tant que vous n'êtes intéressé que par «tif», comme la question semble l'indiquer. En outre, vous pouvez toujours comparer à «jpg» et «peg». Les chances sont assez minimes qu'un fichier image se termine par "peg" et n'est pas * un jpeg. – Tomalak

Questions connexes