2017-06-24 1 views
0

Je dois exécuter une condition avant d'appeler l'instruction xsl:call-template. J'essaie de vérifier une condition où, après avoir scindé la chaîne si la valeur1 ou la valeur2 a une valeur nulle ou une valeur vide, l'ensemble de l'enregistrement et l'élément qui s'y trouve ne doivent pas être imprimés.Condition dans xsl: call-template afin de restreindre la prise en compte de Null ou WhiteSpace pour Split Scénario dans XSLT

Voici juste un court exemple ce que je dois:

Value1 : Name1;;Name3 

Value2 : Sam;Tsn;Doug 

Résultats escomptés:

<Profile> 
<Type>Name1</Type> 
<Value>Sam</Value> 
</Profile> 
<Profile> 
<Type>Name3</Type> 
<Value>Doug</Value> 
</Profile> 

Voici donc le deuxième type et la valeur n'a pas l'impression car il avait une valeur vide dans Valeur1 Et vice versa, si Valeur2 avait une valeur vide et que Valeur1 avait une valeur, il devrait également l'empêcher de l'imprimer.

Ce que j'ai essayé: La question est ce qui se passe toujours contient une valeur que nous ne pouvons pas faire un chèque là-bas

<xsl:template name="WritePropertyNodeTemplateName"> 
<xsl:param name="Name" /> 
<xsl:param name="Type" /> 
<xsl:if test="$Name != '' and $Type != ''"> // Had put condition here but didnt work 
    <xsl:call-template name="StringSplitName"> 
     <xsl:with-param name="val1" select="$Name" /> 
     <xsl:with-param name="val2" select="$Type" /> 
    </xsl:call-template> 
</xsl:if> 
</xsl:template> 
<xsl:template name="StringSplitName"> 
<xsl:param name="val1" /> 
<xsl:param name="val2" /> 
<xsl:choose> 
    <xsl:when test="contains($val1, ';')"> 
     <xsl:if test="$val2 != '' and $val1 != ''"> 
      <xsl:value-of select="'1st'" /> 
      <ns1:OtherType xmlns:ns1="http://schemas.datacontract.org/2004/07/GEP.Cumulus.WebInterfaces.BusinessEntities"> 
       <ns1:Name xmlns:ns1="http://schemas.datacontract.org/2004/07/GEP.Cumulus.WebInterfaces.BusinessEntities"> 
        <xsl:value-of select="substring-before($val1, ';')" /> 
       </ns1:Name> 
       <ns1:Type xmlns:ns1="http://schemas.datacontract.org/2004/07/GEP.Cumulus.WebInterfaces.BusinessEntities"> 
        <xsl:value-of select="substring-before($val2, ';')" /> 
       </ns1:Type> 
      </ns1:OtherType> 
      <xsl:call-template name="StringSplitName"> 
       //Tried to put condition here also but didnt work 
       <xsl:with-param name="val1" select="substring-after($val1, ';')" /> 
       <xsl:with-param name="val2" select="substring-after($val2, ';')" /> 
      </xsl:call-template> 
     </xsl:if> 
    </xsl:when> 
</xsl:choose> 
</xsl:template> 

J'utilise ce code XSLT dans les cartes BizTalk.

Répondre

0

Pourquoi ne pas simplement:

<xsl:template name="tokenize"> 
    <xsl:param name="types"/> 
    <xsl:param name="values"/> 
    <xsl:param name="delimiter" select="';'"/> 
     <xsl:variable name="type" select="substring-before(concat($types, $delimiter), $delimiter)" /> 
     <xsl:variable name="value" select="substring-before(concat($values, $delimiter), $delimiter)" /> 
     <xsl:if test="normalize-space($type) and normalize-space($value)"> 
      <Profile> 
       <Type> 
        <xsl:value-of select="$type"/> 
       </Type> 
       <Value> 
        <xsl:value-of select="$value"/> 
       </Value> 
      </Profile> 
     </xsl:if> 
     <xsl:if test="contains($types, $delimiter)"> 
      <!-- recursive call --> 
      <xsl:call-template name="tokenize"> 
       <xsl:with-param name="types" select="substring-after($types, $delimiter)"/> 
       <xsl:with-param name="values" select="substring-after($values, $delimiter)"/> 
      </xsl:call-template> 
     </xsl:if> 
</xsl:template> 

Exemple d'appel:

<xsl:call-template name="tokenize"> 
     <xsl:with-param name="types">Name1; ;Name3</xsl:with-param> 
     <xsl:with-param name="values">Sam;Tsn;Doug;</xsl:with-param> 
    </xsl:call-template> 

Résultat:

<Profile> 
    <Type>Name1</Type> 
    <Value>Sam</Value> 
    </Profile> 
    <Profile> 
    <Type>Name3</Type> 
    <Value>Doug</Value> 
    </Profile> 

Démo: http://xsltransform.net/93dEHFW

+0

Merci pour votre réponse, mais cette solution ne fonctionnera que pour les espaces blancs ou Null condition. Qu'en est-il de la condition dire en valeur2 a la valeur 'Tsn' et dans le cas de la valeur Tsn il ne devrait pas imprimer. – Learner

+0

@Learner Je ne vois aucune mention d'une telle condition dans votre question, donc naturellement je ne l'ai pas abordé. Quoi qu'il en soit, il devrait être assez facile d'ajouter ** n'importe quelle condition ** à l'existant. Si vous ne pouvez pas le faire fonctionner, postez une nouvelle question. –

+0

Merci pour votre aide – Learner