2012-02-23 7 views
3

J'ai un fichier XML que j'ai besoin de transformer en utilisant un script XSL.XPath Substring

Voici un exemple de flux. J'ai besoin d'extraire le texte dans l'élément NameLabel, mais j'ai seulement besoin du texte spécifiquement entre les deux premiers tirets.

Par exemple, je veux le A dans la chaîne ci-dessous:

NTX- A -20120131-0006

Je suis peu familiarisés avec XPath, donc j'ai du mal à mettre sur pied une expression, cependant je suppose que j'ai besoin d'utiliser substring- (après | before). Je ne suis pas sûr de comment.

XML Exemple:

<NewsML> 
    <NewsItem> 
     <Identification> 
      <NameLabel>NTX-A-20120131-0006</NameLabel> 
     </Identification> 
    </NewsItem> 
</NewsML> 

Edit:

J'utilise xslt 1.0

+0

quelle version de xslt? 1 ou 2? – mindandmedia

+0

J'utilise xslt 1. – Steve

Répondre

7
substring-before(s1,s2) and substring-after(s1,s2) would work. 

substring-before(substring-after(NewsML/NewsItem/Identification/NameLabel,'-'),'-') 
+0

Parfait, merci. – Steve

1

essayer

<xsl:template match="/"> 
    <xsl:apply-templates select="NewsItem/NewsML/Identification"/> 
</xsl:template> 

<xsl:template match="Identification"> 
    <xsl:value-of select="substring-before(substring-after(NameLabel,'-'),'-'))"/> 
</xsl:template> 

mais je ne pouvais pas tester cette

1

Si vous utilisez XSLT 2.0, alors une meilleure expression serait:

fn:replace(NewsItem/NewsML/Identification, "^.*-(.)-.*$", $1) 

Mais si vous êtes coincé avec XSLT 1, puis aller avec la réponse de Aepheus.