2017-06-28 2 views
0

J'ai un xml comme ci-dessous:Annexer un paramètre à la valeur de la balise en utilisant xslt

<?xml version="1.0" encoding="UTF-8" standalone="no"?> 
<properties> 
<entry key="user">1234</entry> 
<entry key="docname">abc.pdf</entry> 
</properties> 

Je veux ajouter la valeur passée du code Java au nom du fichier présent dans docname étiquette et le transformer en un nouveau xml fichier en utilisant xslt, le xml de sortie devrait être comme ça

<?xml version="1.0" encoding="UTF-8" standalone="no"?> 
<properties> 
<entry key="user">1234</entry> 
<entry key="docname">abc_1.pdf</entry> 
</properties> 

J'utilise le xslt ci-dessous. L'identifiant du paramètre est transmis à partir du code Java.

<xsl:transform xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:xs="http://www.w3.org/2001/XMLSchema" exclude-result-prefixes="xs" version="2.0"> 
<xsl:param name="id"/> 
    <xsl:variable name="newName" select="/properties/entry[@key='docname']"/> 
    <xsl:template match="entry[@key='docname']"> 
    <xsl:copy> 
     <xsl:apply-templates select="@*"/> 
     <xsl:value-of select="replace($newName, $newName, $id)"/> 
    </xsl:copy> 
    </xsl:template> 

    <xsl:template match="@*|node()"> 
     <xsl:copy> 
      <xsl:apply-templates select="@*|node()"/> 
     </xsl:copy> 
    </xsl:template> 
</xsl:transform> 

La valeur xslt ci-dessus remplace la valeur dans la balise docname. Je veux ajouter l'identifiant avec un trait de soulignement avant l'extension (abc_1.pdf) au lieu de remplacer la valeur entière. Quelqu'un pourrait m'aider s'il vous plaît avec cela ..

+0

Alors, quelle valeur passez-vous pour le paramètre 'id', la chaîne' _1' ou uniquement '1'? –

+0

Je passe 1 en tant que valeur au paramètre id –

Répondre

1

Cela dépend un peu de la complexité des données d'entrée, s'il n'y a qu'un seul point '.' dans les noms de fichiers, vous pouvez simplement faire

<xsl:value-of select="concat(substring-before(., '.'), '_', $id, '.', substring-after(., '.'))"/> 

Ou utilisez

<xsl:value-of select="replace(., '\.\w+$', concat('_', $id, '$0'))"/> 

pour remplacer le suffixe à la fin avec la concaténation de _, le $id et le suffixe.