xslt 1.0 substring-after忽略大小写

时间:2014-02-25 11:32:43

标签: xslt xslt-1.0

我有2个像这样的xml节点,例如:

<Model>GRAND MODUS</Model>
<QualifiedDescription>2008 58 Reg Renault Grand Modus 1.2 TCE Dynamique 5drMetallic Flame Red</QualifiedDescription>

我正在尝试使用substring-after在 Grand Modus 之后拆分 QualifiedDescription ,如下所示:

<xsl:variable name="something"><xsl:value-of select='substring-after(QualifiedDescription, Model)' /></xsl:variable>

但很明显,它不具备区分大小写的功能。是否有可能使substring-after工作区不区分大小写,但仍然返回保留EG的情况下的输出。

1.2 TCE Dynamique 5drMetallic Flame Red

感谢。

2 个答案:

答案 0 :(得分:3)

您可以使用translate将两个字符串转换为相同的大小写,以便在第二个字符串中计算出第一个字符的偏移量,然后获取原始的<{1}} substring来自那个位置。

QualifiedDescription

您需要稍微复杂的逻辑来考虑QualifiedDescription不包含模型的情况(因为在这种情况下,<xsl:variable name="uc" select="'ABCDEFGHIJKLMNOPQRSTUVWXYZ'" /> <xsl:variable name="lc" select="'abcdefghijklmnopqrstuvwxyz'" /> <xsl:variable name="substrStart" select=" string-length(substring-before(translate(QualifiedDescription, $uc, $lc), translate(Model, $uc, $lc))) + string-length(Model) + 1" /><!-- +1 because string indexes in XPath are 1-based --> <xsl:variable name="something" select="substring(QualifiedDescription, $substrStart)" /> substring-before都返回空字符串)但是你得到了想法。

答案 1 :(得分:0)

如果大写所有first和substring大写,则可以不区分大小写:

substring-after(upper-case(QualifiedDescription), upper-case(Model))