Xslt 父节点文本值上的模板匹配
下面是一些XMLXslt 父节点文本值上的模板匹配,xslt,Xslt,下面是一些XML <flowTypologies type="flowTypologies"> <flowTypology type="flowTypology"> <label type="string">Typology0</label> <value type="string">CAP</value> </flowTypology> <flowTypology type="
<flowTypologies type="flowTypologies">
<flowTypology type="flowTypology">
<label type="string">Typology0</label>
<value type="string">CAP</value>
</flowTypology>
<flowTypology type="flowTypology">
<label type="string">Typology1</label>
<value type="string"/>
</flowTypology>
<flowTypology type="flowTypology">
<label type="string">Typology2</label>
<value type="string"/>
</flowTypology>
<flowTypology type="flowTypology">
<label type="string">Typology3</label>
<value type="string"/>
</flowTypology>
<flowTypology type="flowTypology">
<label type="string">Typology4</label>
<value type="string">INT</value>
</flowTypology>
<flowTypology type="flowTypology">
<label type="string">GlobalCashflowTypology</label>
<value type="string"/>
</flowTypology>
</flowTypologies>
类型学0
帽子
类型学1
类型学2
类型学3
类型学4
国际的
全球流动类型学
下面是一个样式表片段来转换它
<xsl:stylesheet
xmlns:xs="http://www.w3.org/2001/XMLSchema"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
exclude-result-prefixes="xs" version="1.0">
<xsl:strip-space elements="*"/>
<xsl:template match="flowTypologies[. = 'Typology0CAPTypology1Typology2Typology3Typology4INTGlobalCashFlowTypology']">
<xsl:text>I should get here</xsl:text>
</xsl:template>
</xsl:stylesheet>
我应该到这里
因此,希望模板匹配顶级节点的文本值。模板谓词中的字符串应该是FlowType下所有从属节点中文本的串联
然而,它并不匹配
这是一个XSLT1.0样式表,我尝试用Saxon 6.5和Xalan对其进行转换
我已经对FlowTypeology做了一个值,它确实产生了谓词中测试的值,但规则从不触发。只需将模板匹配减少为:
<xsl:template match="flowTypologies">
<xsl:text>I should get here</xsl:text>
</xsl:template>
我应该到这里
我想不出在这里用钥匙的理由。如果为最外面的元素定义了键,那么它们实际上位于错误的位置,因为只有一个键。此外,决不能依赖字符串的串联来限定模板匹配。例如,这是有风险的,因为并非所有实现都以相同的方式处理空白
然而,它并不匹配
它不匹配,因为XML区分大小写:“GlobalCashFlowType”
与“GlobalCashFlowType”
不同
除此之外,我不确定您在这里想要实现什么,但肯定有比使用巨大的字符串来匹配包装器更好的方法?您是完全正确的。我错过了上次答复中指出的错字。它最初是由Dmitre Novatchev在XSL邮件列表上发现的,但即使在他指出之后,我也没有看到它。想象一下,对于每一个独特的价值叶节点组合,您都希望触发一个不同的模板。庞大的字符串比您必须编写的多条件字符串更可取。我将使用一个键,并首先对值进行排序。因为你们现在所拥有的是一个特定的排列,而不是组合。我所说的唯一组合是指排列。我发帖时没有用数学术语思考。