2012-04-26 47 views
1

我有這樣的事情在我的XML文件文本在XML到XSLT後線

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

但有時候,屬性的值太長了我想在兩行顯示它。
我該怎麼做?是否有可能將屬性的價值放在回車上?

謝謝

回答

0

你可以換行實體&#10;添加到屬性值。這將導致在所需位置換行:

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

這應該導致這樣的事情:

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

爲對方回答說是最好的選擇,但請注意,這個編碼的新行幾乎完全依賴於你使用哪個XSL處理器,甚至是版本 - 即msxsl 3和4將產生不同的輸出(3將需要更多的線)。

它去,你是否有它的或新的生產線的產量將顯示相同的HTML格式的基礎上,不

另一種選擇是,以檢查線路長度在你的XSL,如果它太長手動打破它在最接近空間

0

這裏是分割的話分成兩行,使得第一行不超過預定長度的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> 

的希望,正確的結果是prodiced:

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