2009-04-06 5 views
1

J'ai 20 formulaires que j'imprime en utilisant XML et XSLT. Maintenant, j'ai besoin d'une fonctionnalité où je peux imprimer ces formulaires en blanc. Par exemple, j'ai un champ « Nom » dans mon XML et un correspondantComment puis-je fournir le même formulaire 1) Vide, et 2) Rempli, via XSLT?

<span>Name:</span> 
<strong class="data"> 
    <xsl:value-of disable-output-escaping="yes" select="Name" /> 
</strong> 

je besoin de 2 fonctionnalités:

  1. Je veux imprimer le nom par exemple: Name: John Doe
  2. Je ne veux pas Pour imprimer le nom et laisser l'utilisateur remplir par exemple: Name:________

Selon que c'est une zone de texte, une zone de texte ou une case à cocher, je souhaite ajouter des espaces relatifs. Donc, si c'est un champ de zone de texte, je veux ajouter un espace égal à la taille du champ afin que l'utilisateur puisse ajouter des informations.

Quelqu'un at-il une idée de la façon dont cela peut être mis en œuvre?

Merci

+0

Question intéressante! Allez-vous utiliser le même XSLT pour les deux scénarios ou un autre pour le formulaire vierge? – Cerebrus

+0

oui, je ne veux pas recréer le xslt à nouveau. – Mithil

+0

Cela signifie-t-il que vous voulez avoir un modèle supplémentaire qui transforme la sortie que vous avez déjà une fois de plus, en ajoutant des espaces vides là où ils sont manquants? – Tomalak

Répondre

0

Vous pouvez utiliser la fonction chaîne de longueur pour déterminer la longueur de votre chaîne de nom, et si elle est vide, vous imprimez votre chaîne de soulignement. voici un échantillon:

<span>Name:</span> 
<strong class="data"> 
    <xsl:choose> 
     <xsl:when test="string-length(Name) > 0"> 
      <xsl:value-of disable-output-escaping="yes" select="Name" /> 
     </xsl:when> 
     <xsl:otherwise> 
      _____________________________ 
     </xsl:otherwise> 
    </xsl:choose> 
</strong> 

De cette façon, vous venez de passer dans un document XML en blanc, et la feuille de style imprimera en tant que tel.

+0

Merci pour la réponse, mais je ne veux pas passer par tous mes xslts (il y en a environ 80) et faire ce changement. De plus, s'il y a une zone de texte, j'ai besoin de deux espaces de ligne. – Mithil

1

Pour créer des ébauches de la longueur appropriée, vous pouvez:

<!-- make sure you put in more blanks than you'll need --> 
<xsl:variable name="blanks" select="'___[...100 blanks...]___'" /> 

<!-- and later --> 

<xsl:value-of select="substring($blanks, 1, @fieldlength)" /> 

Ou

<xsl:template name="create-blanks"> 
    <xsl:param name="todo" select="0" /> 

    <xsl:if test="$todo &gt; 0"> 
    <xsl:text>_</xsl:text> 
    <xsl:call-template name="create-blanks"> 
     <xsl:with-param name="todo" select="$todo - 1" /> 
    </xsl:call-template> 
    </xsl:choose> 
</xsl:template> 

<!-- and later --> 

<xsl:variable name="blanks"> 
    <xsl:call-template name="create-blanks"> 
    <xsl:with-param name="todo" select="@fieldlength" /> 
    </xsl:call-template> 
</xsl:variable> 

<xsl:value-of select="$blanks" /> 

Côté performance, la première approche est clairement à privilégier. Ce dernier peut être quelque peu amélioré en créant plus d'un blanc (par exemple 10) à chaque fois et en l'appelant non @fieldlength, mais ceiling(@fieldlength div 10) fois, en utilisant substring() sur le résultat. Ce calcul peut bien sûr se produire dans le modèle lui-même.

Si aucun maximum raisonnable de blancs ne peut être pré-déterminé (quelque peu improbable pour votre cas, je suppose), cette dernière méthode vous assure que vous ne pouvez jamais "manquer".

+0

Merci pour la réponse, mais je ne veux pas passer par tous mes xslts (il y en a environ 80) et faire ce changement. De plus, s'il y a une zone de texte, j'ai besoin de deux espaces de ligne. – Mithil

+0

Alors, que voulez-vous exactement? Comment voulez-vous changer la sortie si vous n'allez pas changer les XSLT? – Tomalak

+0

fondamentalement ce que je pensais est que je crée un xml vide pour toutes mes formes et puis selon le champ de chaque champ j'ajoute le nombre correspondant d'espaces vides. Cela a-t-il un sens? – Mithil

Questions connexes