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>

但是有时候,属性的值太长了,我想把它显示在两行上。
我怎样才能做到这一点?是否可以在回车的属性值中添加一些东西?

谢谢

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

这是一个 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 回答
0

正如另一个答案所说,编码的新行是您最好的选择,但请注意,这几乎完全取决于您使用的 XSL 处理器,甚至取决于版本 - 即 msxsl 3 和 4 将产生不同的输出(3 将需要很多更多行)。

它的基础是无论您是否有新行,您的输出都将在 html 中显示相同

另一种选择是检查 XSL 中的行长,如果太长,请在最近的空格处手动断开

于 2012-04-26T09:14:59.090 回答