【问题标题】:XSLT convert new line to <br/>XSLT 将新行转换为 <br/>
【发布时间】:2012-08-03 03:55:43
【问题描述】:

我无法让它工作。我已经看过所有关于堆栈溢出的示例并理解 xslt 代码。但由于某种原因,它正在替换我的空格字符而不是新行。

<t>Line1 Is here 
Line2 Is another 
Line3 Is some more 
</t> 

XSLT 模板是

<xsl:stylesheet version="1.0"  
 xmlns:xsl="http://www.w3.org/1999/XSL/Transform">  
 <xsl:output omit-xml-declaration="yes" indent="yes"/>  
 <xsl:template match="t">  
  <p>  
    <xsl:apply-templates/>  
  </p>  
 </xsl:template>  

 <xsl:template match="text()" name="insertBreaks">  
   <xsl:param name="pText" select="."/>  

   <xsl:choose>  
     <xsl:when test="not(contains($pText, '&#xA;'))">  
       <xsl:copy-of select="$pText"/>  
     </xsl:when>  
     <xsl:otherwise>  
       <xsl:value-of select="substring-before($pText, '&#xA;')"/>  
       <br />  
       <xsl:call-template name="insertBreaks">  
         <xsl:with-param name="pText" select=  
           "substring-after($pText, '&#xA;')"/>  
       </xsl:call-template>  
     </xsl:otherwise>  
   </xsl:choose>  
 </xsl:template>  
</xsl:stylesheet> 

我得到的结果是这样的

Line1 
Is 
here Line2 
Is 
another Line3 
Is 
some 
more 

在此处查看我的示例http://www.xsltcake.com/slices/VsPbib

它似乎是替换空格字符而不是换行符。

【问题讨论】:

  • 我无法重现该问题。只需复制并粘贴提供的 XML 文档和 XSLT 转换,然后在该 XML 文档上运行转换,我得到以下结果:

    Line1 在这里
    Line2 是另一个
    Line3 是更多

    并且浏览器显示为:

    Line1 在这里
    Line2 是另一个
    Line3 是更多

    我得到相同的结果我在计算机上安装的所有 11 个 XSLT 处理器:MSXML 3/4/6、.NET XslCompiledTransform 和 .NET XslTransform、AltovaXML (XML-SPY)、Saxon 6.5.4、Saxon 9.1.07、Saxon 9.1。 .NET 为 07,XSLT 2 为 AltovaXML。

标签: xslt xslt-1.0


【解决方案1】:

这是 webkit 中的一个已知问题,它会影响 Safari 和 Chrome。详情如下:

https://bugs.webkit.org/show_bug.cgi?id=53375

前段时间我自己也问过类似的问题:Is there any way of getting webkit's javascript to handle whitespace properly?

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-03-19
    • 1970-01-01
    • 2011-08-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-09-14
    相关资源
    最近更新 更多