我正在尝试清理代码的可读性。使用v1。我非常感谢你对我做错的任何帮助。
我拥有的XML代码:
...
<trusted-servers>mark mike sally</trusted-servers>
...
我希望它显示以下方式:
mark
mike
sally
最初,它以这种方式显示使用(<xsl:value-of select="trusted-servers"/>
):
mark mike sally
我试过的是:
<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/>
但仍有相同的错误。我在其他任何方面都毫无头绪。
答案 0 :(得分: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>
您在xmlns:str="http://exslt.org/strings"
上声明xsl:stylesheet
。
答案 1 :(得分: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>