gpt4 book ai didi

xslt - 从属性值中去除前缀

转载 作者:行者123 更新时间:2023-12-03 15:38:13 25 4
gpt4 key购买 nike

对于一个项目,我坚持使用 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com