我正在尝试清理我的代码的可读性。使用 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/>
但仍然有同样的错误。我对其他任何方式都一无所知。
最佳答案
一般来说,<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>
关于XML/XSL 用 <br/> 替换空格,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20959843/