2017-09-27 1 views
0

J'ai String comme O, T, A, F, M, I, S, R, A (Hedged), V, PFT lorsque essayer de tokenize avec virgule segmentée, je reçois résultat comme OTAFMISRA Couvert V PFT avec A se dupliquer et ce qui est incorrect, il devrait avoir A (Hedged) comme un jeton.xsl chaîne tokenize valeur dupliquée

I essayé ci-dessous xsl: noeud XML aura une valeur en tant que O, T, A, F, M, I, S, R, A (couvert), V, PFT

XML:

<?xml version="1.0" encoding="UTF-8"?> 
<path> 
<some>O, T, A, F, M, I, S, R, A (Hedged), V, PFT</some> 
</path> 

<xsl:variable name="val" select="//path/some" /> 
<xsl:for-each select="str:tokenize($val, ', ')"> 
    <xsl:variable name="tokVal" select="."/> 
<h2><xsl:value-of select="$tokVal"/></h2> 
</xsl:for-each> 

sortie prévue est OTAFMISRA (Hedged) V PFT

+0

Si vous vouliez une chaîne pour commencer, vous auriez besoin de '. –

+0

Mis à jour mon message J'essayais juste de mettre le bloc de code. – user3669116

+0

Pensez à poster un exemple minimal mais complet et exécutable nous permettant de reproduire le problème. Je crains 'select =" O, T, A, F, M, I, S, R, A (couvert), V, PFT "' n'est pas une chaîne du tout. Un 'O' sans guillemets essaierait de sélectionner un élément enfant nommé' O' du noeud contextuel et 'A (Hedged)' essaierait d'appeler une fonction nommée 'A' avec un argument formé par la sélection d'un élément nommé' Hedged '. –

Répondre

1

en utilisant XSLT 2.0 et votre entrée XML a finalement posté je ne peux pas reproduire le problème à http://xsltransform.net/bEzjRKJ, est entrée

<path> 
<some>O, T, A, F, M, I, S, R, A (Hedged), V, PFT</some> 
</path> 

XSLT minimale est

<xsl:transform xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="2.0"> 
    <xsl:output method="html" doctype-public="XSLT-compat" omit-xml-declaration="yes" encoding="UTF-8" indent="yes" /> 

    <xsl:template match="/"> 
     <html> 
     <head> 
      <title>Test</title> 
     </head> 
     <xsl:apply-templates/> 
     </html> 
    </xsl:template> 

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

    <xsl:template match="some"> 
     <xsl:for-each select="tokenize(., '\s*,\s*')"> 
      <h2> 
       <xsl:value-of select="."/> 
      </h2> 
     </xsl:for-each> 
    </xsl:template> 
</xsl:transform> 
sortie

est

<!DOCTYPE html 
    PUBLIC "XSLT-compat"> 
<html> 
    <head> 
     <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> 
     <title>Test</title> 
    </head> 
    <path> 

     <h2>O</h2> 
     <h2>T</h2> 
     <h2>A</h2> 
     <h2>F</h2> 
     <h2>M</h2> 
     <h2>I</h2> 
     <h2>S</h2> 
     <h2>R</h2> 
     <h2>A (Hedged)</h2> 
     <h2>V</h2> 
     <h2>PFT</h2> 

    </path> 
</html> 

rendu comme

O

T

A

F

M

I

S

R

A (couvert)

V

PFT

+0

Merci, cela a fonctionné.La liste des chaînes contenait aussi de l'espace qui était à l'origine du problème.Avant d'utiliser les jetons, j'ai supprimé les espaces. – user3669116