1

XMLファイルにこのようなものがあります

<ELEMENT attribute="Value of the attribute">Some text</ELEMENT>

XSLT テンプレートは

<span>
    <p>
        <xsl:value-of select="@attribute"/>
    </p>
</span>

いくつかのXSLTによって変換された後、私はこれを持っています

<span>
    <p>
        Value of the attribute
    </P>
 </span>

しかし、属性の値が長すぎて 2 行で表示したい場合があります。
どうやってやるの?キャリッジ リターンの属性の値に何かを入れることは可能ですか?

ありがとうございました

4

3 に答える 3

0

改行エンティティ&#10;を属性値に追加できます。目的の位置で改行が発生します。

<ELEMENT attribute="Value of the&#10;attribute">Some text</ELEMENT>

それは次のようなものになるはずです:

<span>
  <p>
    Value of the 
attribute
  </p>
</span>
于 2012-04-26T08:09:21.127 に答える
0

他の回答が言うように、コード化された新しい行が最良の選択肢ですが、これは、バージョンに至るまで、使用する XSL プロセッサにほぼ完全に依存することに注意してください-つまり、msxsl 3 と 4 は異なる出力を生成します (3 は多くの時間がかかります)より多くの行)。

改行があるかどうかに関係なく、出力がhtmlで同じように表示されることに基づいています

もう 1 つのオプションは、XSL で行の長さを確認し、長すぎる場合は、最も近いスペースで手動で改行することです。

于 2012-04-26T09:14:59.090 に答える
0

最初の行が定義済みの長さを超えないように、単語を 2 行に分割する XSLT 2.0 変換を次に示します

<xsl:stylesheet version="2.0"
    xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
    <xsl:output omit-xml-declaration="yes" indent="yes"/>

 <xsl:param name="pMaxLength" select="15"/>

 <xsl:template match="ELEMENT">
  <xsl:variable name="vWords" select="tokenize(@attribute, '\W+')"/>

  <xsl:variable name="vNumWords" select="count($vWords)"/>

  <xsl:variable name="vLastWordPos" select=
   "for $k in 1 to vNumWords
      return
         if(string-length(string-join($vWords[position() le $k],
                                      ' ')
                          )
            le $pMaxLength
         and
            string-length(string-join($vWords[position() le $k+1],
                                      ' ')
                          )
            gt $pMaxLength
            )
         then $k
         else ()
   "/>

   <xsl:variable name="vLastPos" select=
    "($vLastWordPos, $vNumWords)[1]"/>

      <span>
        <p>
         <xsl:value-of select=
         "string-join($vWords[position() lt $vLastPos], ' '),
          string-join($vWords[position() ge $vLastPos], ' ')
         "
         separator="&#xA;"/>
        </p>
       </span>
 </xsl:template>
</xsl:stylesheet>

提供された XML ドキュメントに適用した場合:

<ELEMENT attribute="Value of the attribute">Some text</ELEMENT>

必要な正しい結果が生成されます。

<span>
   <p>Value of the
attribute</p>
</span>

注意: 出力は HTML であるため、おそらく上記のコードでこれを置き換えたいと思うでしょう:

  <span>
    <p>
     <xsl:value-of select=
     "string-join($vWords[position() lt $vLastPos], ' ')"/>
     <br />
      <xsl:value-of select=
              "string-join($vWords[position() ge $vLastPos], ' ')"/>
    </p>
   </span>
于 2012-04-26T13:13:03.467 に答える