2014-02-25 76 views
1

我有这样2个XML节点,例如:XSLT 1.0子,后忽略大小写

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

我想,后子使用大MODUS后到QualifiedDescription分裂像这样:

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

但是很明显,它不是在工作,因为它是区分大小写的。是否有可能得到子字符串后工作不区分大小写,但仍然返回与案例保存EG的输出。

1.2 TCE Dynamique 5drMetallic Flame Red 

谢谢。

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

回答

3

你可以在两个字符串转换为以制定出性格中的第一个偏移使用translate相同的情况:

+0

很棒。像梦一样工作。感谢您的帮助。 –

0

如果你大写的所有第一和子上大写您可以不分大小写第二,然后从该位置取原始QualifiedDescriptionsubstring

<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)" /> 

你会需要稍微更复杂的逻辑取其中QualifiedDescription不包括模型(因为在这种情况下,两个substring-beforesubstring-after返回空字符串),但你的想法的情况下考虑。

+0

嗯。我得到大写()'是一个未知的XSLT函数。 –

+0

'upper-case'是一个XPath 2.0函数,它不适用于1.0 –