2009-04-06 9 views
1

私は20種類のフォームをXMLとXSLTで印刷しています。今私は、これらのフォームを空白として印刷できる機能が必要です。たとえば、私は私のXMLで「名前」フィールドを持っていると私は2つの官能必要対応同じフォームをどのように提供できますか?1)空白、2)XSLTで入力しますか?

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

:私は例えば名前を印刷したい

  1. を:Name: John Doe
  2. 私はしたくありません名前を印刷してユーザーに記入させる例:Name:________

テキストボックス、テキスト領域、またはチェックボックスのいずれかを使用して相対的なスペースを追加するかどうかによって異なります。だから、テキストエリアのフィールドであれば、ユーザーが情報を追加できるように、フィールドサイズと同じスペースを追加したいと思います。

これはどのように実装できますか?

おかげ

+0

興味深い質問!両方のシナリオで同じXSLTを使用しますか、空白のフォームで別のXSLTを使用しますか? – Cerebrus

+0

はい、私はxsltを再作成したくありません。 – Mithil

+0

これは、あなたがもう一度持っている出力を変換し、欠けている場所に空白を追加するテンプレートを追加したいということですか? – Tomalak

答えて

0

あなたは自分の名前の文字列の長さを決定するために、文字列の長さの関数を使用することができ、それが空白の場合、その後、あなたは下線文字列を印刷します。ここにサンプルがあります:

<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> 

この方法では、空のXMLドキュメントを渡すだけで、スタイルシートはそのように印刷します。適切な長さの空白を作成するには

+0

返事をありがとう、しかし私はすべての私のxslts(80奇数がある)を通過し、この変更をしたくない。また、テキスト領域がある場合は、2行のスペースが必要です。 – Mithil

1

、次のいずれかを実行します

<!-- 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)" /> 

それとも

<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" /> 

はパフォーマンス面では、最初のアプローチが好まれることが明らかにあります。後者は、毎回1つ以上のブランク(例えば10)を作成し、@fieldlengthではなく、ceiling(@fieldlength div 10)回と呼んで、結果にsubstring()を使用することによって幾分改善することができる。もちろん、この計算はテンプレート自体でも実行できます。

空白の最大値があらかじめ決められていない場合は、後者の方法では決して "尽きることのない"ことが保証されます。

+0

返事をありがとう、しかし私はすべての私のxslts(80奇数がある)を通過し、この変更をしたくありません。また、テキスト領域がある場合は、2行のスペースが必要です。 – Mithil

+0

あなたは何をしたいのですか? XSLTを変更しない場合、どのように出力を変更したいですか? – Tomalak

+0

基本的に私が考えていたのは、すべてのフォームに対して空のxmlを作成し、各フィールドのfieldsizeに応じて、対応する空白の数を追加することです。それは意味をなさないでしょうか? – Mithil

関連する問題