2011-06-06 2 views
0

salut tous j'ai écrit une logique basée sur une exigence concacte plus de deux données à la fois dans mon code xslt mais je ne suis pas atteindre ma sortie attendue quelqu'un peut donner quelques suggestionscomment concilier plus de deux exigences à la fois

ici est mon xml

  <Swift> 
      <block4> 
        <tag> 
      <name>50K</name> 
      <value> 
       0101/0457887750 
       SAMAROCA 
       MENENDEZ Y PELAYO 
      </value> 
     </tag> 
      </block4> 
     </Swift> 

j'ai écrit un xslt ici:

<xsl:template match="swift/message/block4/tag [name='50K']">  
    <xsl:variable name ="del50k" select ="(translate(substring-after(value,'&#13;'),'&#13;','~'))"/> 
    <xsl:value-of select="concat(substring(value, 1, 5), ',',substring(substring-before(value,'&#13;'),6), ',',$del50k)" /> 
</xsl:template> 

est cette façon de faire est correct ou non? que peut aider

ATTENDUS SORTIE:

0101 /, 0457887750, SAMAROCA ~ MENENDEZ Y PELAYO

+0

'match =" rapide/message/block4/tag [name = '50K']/value' ne va pas correspondre à quelque chose. Votre entrée ne contient pas de 'élément message'. –

+0

@empo non j'ai donné comme ceci >> match = "swift/message/block4/tag [name = '50K'] – pubby

+0

Oui, mais votre XML ne contient aucun élément appelé' message'. En outre, l'élément 'Swift' est en majuscule; XML est sensible à la casse, cela fait une différence. Je vous suggère également de décrire ce que vous obtenez actuellement. – Flynn1179

Répondre

0

Je vous donne un exemple de travail complet basé sur votre contribution. Quelques notes:

  • Utilisez normalize-space() et divisez la chaîne par espace. Jouez avec substring-before et substring-after.
  • assurez-vous d'utiliser xsl:strip-space.

<xsl:stylesheet version="1.0" 
    xmlns:xsl="http://www.w3.org/1999/XSL/Transform" 
    > 
    <xsl:output omit-xml-declaration="yes" method="text"/> 
    <xsl:strip-space elements="*"/> 

    <xsl:variable name="space" select="'&#x20;'"/> 

    <xsl:template match="block4/tag[name='50K']"> 
     <xsl:variable name="value" select="normalize-space(value)"/> 

     <xsl:variable name="code" select="substring-before($value,$space)"/> 
     <xsl:variable name="string1" select="concat(
      substring-before($code,'/'), 
      '/,', 
      substring-after($code,'/'))"/> 
     <xsl:variable name="string2" select="substring-before(
      substring-after($value,$space), 
      $space)"/> 
     <xsl:variable name="string3" select="substring-after(
      substring-after($value,$space), 
      $space)"/> 

     <xsl:value-of select="concat($string1,',',$string2,'~',$string3)"/> 

    </xsl:template> 

    <xsl:template match="name|value"/> 
</xsl:stylesheet> 
+0

code impressionnant simple moyen de comprendre ... !!! mais vraiment je ne fais pas ce que j'ai fait une erreur dans ma logique – pubby

+0

Parmi les autres commentaires ci-dessus, 'translate()' ne fonctionnera pas bien avec les caractères spéciaux, je pense. –

0

Votre plus gros problème est que value vous est noeud contextuel (défini dans match de votre modèle attribut), mais vous faites référence à value dans votre XPath. Cela recherchera un nœud value dans le nœud value, ce qui est évidemment faux.

Dans vos <xsl:variable> et <xsl:value-of> déclarations, changement refences à value à ., pour faire référence au noeud courant à la place.

Je pense que ce n'est probablement pas le seul problème, mais étant donné que votre modèle ne correspondra à rien dans ce document de toute façon, il est difficile d'en déduire l'endroit où il pourrait se tromper. Un problème supplémentaire possible est que votre prédicat substring-before(value,'&#13;') dans votre <xsl:value-of> ne renverra rien avec la mise en forme donnée, car il y a un retour à la ligne avant le 0101/etc... Maintenant, je pense à ce sujet, cela va également être question dans le substring-after dans la ligne précédente. Cela dépend beaucoup de la façon dont il est formaté, mais d'après ce que vous avez donné ici, c'est un problème.

+0

je n'étais pas clair aimablement pouvez-vous expliquer petit peu bref chef – pubby

Questions connexes