【发布时间】:2014-03-10 23:14:02
【问题描述】:
我已经看到了很多关于在 XSLT 中确定唯一节点的问题和解决方案,并成功地让它发挥作用,直到我需要使用表达式来评估唯一性。
使用这个数据文件:
<root>
<data><field>find me: keyword1</field></data>
<data><field>find me: keyword2</field></data>
<data><field>find me: keyword1</field></data>
<data><field>find me: keyword2</field></data>
<data><field>find me: keyword1</field></data>
<data><field>find me: keyword1</field></data>
<data><field>find me: keyword2</field></data>
</root>
还有这个转换模板:
<xsl:template match="/root">
<xsl:for-each select="data[not(field=preceding-sibling::data/field)]">
field=<xsl:value-of select="field"/>
</xsl:for-each>
<xsl:for-each select="data[not(substring-after(field,': ')=substring-after(preceding-sibling::data/field,': '))]">
short_field=<xsl:value-of select="substring-after(field,': ')" />
</xsl:for-each>
</xsl:template>
我得到以下输出:
field=find me: keyword1
field=find me: keyword2
short_field=keyword1
short_field=keyword2
short_field=keyword2
short_field=keyword2
第一个for-each 按预期工作,但是一旦我使用substring-after 处理field(因为实际上前导文本并不总是匹配),只有第一个值实际匹配。注意两个额外的keyword2值。
任何人都可以解释这一点并提出解决方案吗?我正在使用 MSXSL 执行此评估。
【问题讨论】:
-
您的预期输出是什么?
-
预期的输出不会有我得到的最后两行。