XSLT 2.0:选择一些@class名称,但不选择其他名称

时间:2014-05-23 18:36:53

标签: xslt-2.0

我在类中包含缩进名称的文档,例如:<div class="if"><div class="i1 note">,依此类推。 (缩进类是:if,i1,i2,i3,i4,i5,i6)。

非缩进CSS选择器差异很大。但缩进CSS选择器名称是一致的。

目标:我希望将非缩进类存储在变量中以备将来使用。

这是我进入的方向,没有成功:

<xsl:variable name="indent-names" 
     select="'if i1 i2 i3 i4 i5 i6'"/>

<xsl:variable name="non-indent-classes" 
     select="replace(@class,$indent-names,'')"/>

连连呢?我认为<xsl:analyze-string select="@class" regex=" .... ">是要走的路。还没有成功。

更新

根据马丁的回答,我这样做了:

<xsl:variable name="indent-names" 
    select="'if i1 i2 i3 i4 i5 i6'"/>

<xsl:variable name="non-indent-classes" 
    select="tokenize(@class, ' ')[not(. = tokenize($indent-names, ' '))]"/>

效果很好。我必须更熟悉tokenize()

1 个答案:

答案 0 :(得分:1)

我会使用tokenize(@class, ' ')[not(. = tokenize($indent-names, ' '))]。显然,执行内部标记一次并将其存储在变量<xsl:variable name="names" select="tokenize($indent-names, ' ')"/>中更有效,然后使用该变量tokenize(@class, ' ')[not(. = $names)]