2014-01-06 57 views
2

我想清理我的代碼的可讀性更換空間。使用v1。任何幫助我做錯了,我非常感謝。XML/XSL與<br/>

XML的代碼,我有:

... 
    <trusted-servers>mark mike sally</trusted-servers> 
    ... 

我希望它顯示方式如下:

mark mike sally 

mark 
    mike 
    sally 

最初,它使用(<xsl:value-of select="trusted-servers"/>)顯示以這種方式

我試過的是:

<xsl:value-of select="string-length(substring-before(trusted-servers, concat(' ', trusted-servers, '<xsl:text disable-output-escaping="yes"><![CDATA[<br />]]></xsl:text>')))" data-type="string"/> 

但它拋出一個錯誤,指出了非轉義字符<是不允許的。我試圖拿出<xsl:text disable-output-escaping="yes"><![CDATA[<br />]]></xsl:text>部分,並用<br/>替換它,但仍然有相同的錯誤。我無法以其他任何方式做到這一點。

+1

什麼是目標格式,純文本或HTML還是XML? –

+1

針對HTML。我使用xsltproc將其解析爲HTML文件。所以這是寫在一個.xsl文件。 – misterbear

回答

3

一般來說,<xsl:text disable-output-escaping="yes">應避免儘可能多的!

由於您使用XSLT 1.0,最好的解決辦法是寫一個模板,將遞歸替換由<br>遇到的第一個空間,例如:

<xsl:template match="trusted-servers" name="replace-space-by-br"> 
    <xsl:param name="text" select="."/> 
    <xsl:choose> 
     <xsl:when test="contains($text, ' ')"> 
      <xsl:variable name="head" select="substring-before($text, ' ')"/> 
      <xsl:variable name="tail" select="substring-after($text, ' ')"/> 
      <xsl:value-of select="$head"/> 
      <br/> 
      <xsl:call-template name="replace-space-by-br"> 
       <xsl:with-param name="text" select="$tail"/> 
      </xsl:call-template> 
     </xsl:when> 
     <xsl:otherwise> 
      <xsl:value-of select="$text"/> 
     </xsl:otherwise> 
    </xsl:choose> 
</xsl:template> 
3

假設在xsltproc你有http://exslt.org/str/functions/tokenize/index.html所以你可以做

<xsl:template match="trusted-servers"> 
    <xsl:for-each select="str:tokenize(., ' ')"> 
    <xsl:if test="position() > 1"><br/></xsl:if> 
    <xsl:value-of select="."/> 
    </xsl:for-each> 
</xsl:template> 

,你在xsl:stylesheet聲明xmlns:str="http://exslt.org/strings"