xml - 是否可以使用 XSLT 翻转和旋转文本?

标签 xml xslt

我想获取 XML 标记的内容,并在通过样式表查看时将其水平(镜像)和垂直(作为列)翻转显示。如果不使用随机的第三方库,这可能吗?

<mytag>Random Data</mytag>

最佳答案

因此,XSLT 不适合字符串处理。有了 XSLT 2.0,事情变得更好了,因为有更多的字符串函数可用,并且可以进行基于序列的操作。

在 XSLT 1.0(它仍然是为其编写代码的最便携版本)中,逐个字符的字符串处理只能通过递归来实现。为了好玩,这个:

<xsl:output method="text" />

<xsl:variable name="CRLF" select="'&#13;&#10;'" />

<xsl:template match="/mytag">
  <!-- flip string -->
  <xsl:call-template name="reverse-string">
    <xsl:with-param name="s" select="string(.)" />
  </xsl:call-template>
  <xsl:value-of select="$CRLF" />

  <!-- vertical string -->
  <xsl:call-template name="vertical-string">
    <xsl:with-param name="s" select="string(.)" />
  </xsl:call-template>
</xsl:template>

<xsl:template name="reverse-string">
  <xsl:param name="s" select="''" />

  <xsl:variable name="l" select="string-length($s)" />

  <xsl:value-of select="substring($s, $l, 1)" />

  <xsl:if test="$l &gt; 0">
    <xsl:call-template name="reverse-string">
      <xsl:with-param name="s" select="substring($s, 1, $l - 1)" />
    </xsl:call-template>
  </xsl:if>
</xsl:template>

<xsl:template name="vertical-string">
  <xsl:param name="s" select="''" />

  <xsl:variable name="l" select="string-length($s)" />

  <xsl:value-of select="concat(substring($s, 1, 1), $CRLF)" />

  <xsl:if test="$l &gt; 0">
    <xsl:call-template name="vertical-string">
      <xsl:with-param name="s" select="substring($s, 2, $l)" />
    </xsl:call-template>
  </xsl:if>
</xsl:template>

产生:

ataD modnaR
R
a
n
d
o
m

D
a
t
a

编辑:明确一点:我不认可以任何方式实际使用上述代码示例。表现问题一定要在表现层解决。上面的方法可行,但逐字符递归是执行字符串处理的最低效方法之一,除非别无选择,否则请避免在 XSLT 中进行字符串处理。

关于xml - 是否可以使用 XSLT 翻转和旋转文本?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/748423/

相关文章:

sql-server - 如何获取 XML 节点值的部分值

xslt-1.0 - XSLT 按索引获取节点

xpath - 如何选择结合前兄弟和后兄弟的节点?

android - 在 onMenuItemActionExpand 上显示 SearchView 内的按钮

javascript - 如何将另一个域的 XSL 应用到 XML

pdf - 如何使用 XSL-FO 在 PDF 中添加分页符?

xml - 说服 Firefox 解析 XML 中嵌入的 HTML(应用 XSL 后)

xslt - xsl-fo 填充如何应用于其他 block ?

xml - 使用 XSLT 生成 XSLT 的一些有用结构是什么?

android - 微调器下方的下划线未与 EditText 的下划线对齐