2017-08-04 2 views
0

que j'ai trouvé le modèle Codesling a fourni en tant que substitut à la remplacer fonction XSLT 1.0: XSLT string replacechaîne de xslt remplacer exemple concret

Le problème que je vais avoir est que je ne peux pas comprendre comment l'adapter à mon exemple concret, j'espère donc quelques conseils ici.

J'ai un paramètre appelé xml ./bib-info qui ressemble à ceci (par exemple):

<bib-info>Gäbler, René, 1971- [(DE-588)138691134]:       Schnell-Umstieg auf Office 2010, [2010]</bib-info> 

Mon but est de remplacer les blancs entre le « ]: » et le début du texte suivant (dans ce cas "Schnell"). Le nombre de blancs est toujours le même btw.

Voici deux autres exemples:

<bib-info>Decker, Karl-Heinz, 1948-2010 [(DE-588)141218622]:       Funktion, Gestaltung und Berechnung, 1963</bib-info> 

<bib-info>Decker, Karl-Heinz, 1948-2010 [(DE-588)141218622]:       Maschinenelemente, 1963</bib-info> 

Quelqu'un pourrait s'il vous plaît me donner un indice comment écrire le code d'appel

<xsl:variable name="newtext"> 
    <xsl:call-template name="string-replace-all"> 
     <xsl:with-param name="text" select="$text" /> 
     <xsl:with-param name="replace" select="a" /> 
     <xsl:with-param name="by" select="b" /> 
    </xsl:call-template> 
</xsl:variable> 

afin qu'elle corresponde à mon problème?

Merci à l'avance

Kate

+1

** 1. ** Vous voulez remplacer les blancs avec quoi? - ** 2. ** Pour un exemple concret, nous devons voir où ' 'est relatif à votre contexte actuel. Alors s'il vous plaît nous montrer un [mcve]. –

+0

Vous avez raison, bien sûr! Je veux remplacer la multitude de blancs avec un seul pour que l'exemple 'code' Decker, Karl-Heinz, 1948-2010 [(DE-588) 141218622]: Funktion, Gestaltung und Berechnung, 1963' code' –

+0

Désolé - n'a pas été assez rapide pour éditer mon commentaire ... :-(Je veux remplacer la multitude de blancs par un seul pour que l'écart moche après le "]:" est fermé.Pardonnez-moi d'oublier de mentionner cela. –

Répondre

0

Mon but est de remplacer les blancs entre le « ]: » et le début du texte suivant

Un exemple fait cela est suivant:

<xsl:template match="bib-info"> 
    <xsl:variable name="newtext"> 
    <xsl:call-template name="string-replace-all"> 
     <xsl:with-param name="text" select="text()" /> 
     <xsl:with-param name="replace" select="']:       '" /> 
     <xsl:with-param name="by" select="']: '" /> 
    </xsl:call-template> 
    </xsl:variable> 
    <bib-info><xsl:value-of select="$newtext" /></bib-info> 
</xsl:template> 

Notez que cela ne remplace que réels espaces et non des onglets ou d'autres caractères spéciaux.


Les chaînes de remplacement BTW peuvent ne pas être le meilleur choix dans ce cas. Vous pouvez obtenir la même chose avec les fonctions de substring XSLT 1.0:

<xsl:template match="bib-info"> 
    <xsl:variable name="newtext1" select="substring-before(text(),']:       ')" /> 
    <xsl:variable name="newtext2" select="substring-after(text(),']:       ')" /> 
    <xsl:variable name="newtext" select="concat($newtext1,']: ',$newtext2)" /> 
    <bib-info><xsl:value-of select="$newtext" /></bib-info> 
</xsl:template> 

La sortie est identique pour les deux modèles.