xslt - 从属性值中去除前缀

标签 xslt xpath xslt-1.0

对于一个项目,我坚持使用 XSLT-1.0/XPATH-1.0,需要一种快速方法来从属性值中去除小写前缀。

示例属性值是:

"cmdValue1", "gfValue2", "dTestCase3"

我需要的值(value)观是:
"Value1", "Value2", "TestCase3"

我想出了这个 XPath 表达式,但它对我的应用程序来说太慢了:
substring(@attr, 1 + string-length(substring-before(translate(@attr, 'ABCDEFGHIJKLMNOPQRSTUVWXYZ', '..........................'), '.')))

本质上,上面确实将所有大写字符替换为点,然后从原始属性值从第一个找到的点位置(第一个大写字符)开始创建一个子字符串。

有没有人知道在 XSLT-1.0/XPATH-1.0 中执行此操作的更短/更快的方法?

最佳答案

XSLT 1.0 中我们可以使用的函数并不多,因此我尝试了以下递归模板以避免使用 translate 函数。

因为它慢了 1.5 倍,所以它不能回答你的问题。我可以避免有人尝试同样的事情:

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" xml:space="default" exclude-result-prefixes="" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" omit-xml-declaration="no" indent="yes" />
<xsl:template match="/">
<out>
  <xsl:call-template name="removePrefix">
    <xsl:with-param name="prefixedName" select="xml/@attrib" />
  </xsl:call-template>
</out>
</xsl:template>
<xsl:template name="removePrefix">
<xsl:param name="prefixedName" />
<xsl:choose>
  <xsl:when test="substring-before('_abcdefghijklmnopqrstuvwxyz', substring($prefixedName, 1,1))">
    <xsl:call-template name="removePrefix">
      <xsl:with-param name="prefixedName" select="substring($prefixedName,2)" />
    </xsl:call-template>
  </xsl:when>
  <xsl:otherwise>
    <xsl:value-of select="$prefixedName" />
  </xsl:otherwise>
</xsl:choose>
</xsl:template>
</xsl:stylesheet>

关于xslt - 从属性值中去除前缀,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21702879/

相关文章:

c# - 使用 C# 显示经过 XSLT 转换的 XML 文件

xml - xslt 1.0 中的编程工具

java - 通过 XSLT 将外部文件内容作为 HTML 插入

xslt - 如何在 XSLT 中检查文件是否存在?

jquery - xpath:是否可以排除 not 函数中的最后一个元素

python - XPath 语法错误 : invalid predicate

xpath - 当一些 child 存在时选择 CDATA 内容的 xpath

xslt - XSLT模板的歧义澄清

xml - XSLT 按位置省略元素?

xslt - 如何从元素中的文本末尾删除空格。 (XSL)