这是一些XML
<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>
这是一个用于转换它的样式表代码段。
<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>
所以希望模板匹配顶级节点的文本值。模板谓词中的字符串应该是flowTypologies下所有下级节点中文本的串联。
然而它不匹配。
这是一个XSLT 1.0样式表,我尝试用Saxon 6.5和Xalan进行转换。
我已经对flowTypologies做了一个值,它确实产生了在谓词中测试的值,但规则永远不会触发。
答案 0 :(得分:1)
然而它不匹配。
它不匹配,因为XML区分大小写:"GlobalCashflowTypology"
与"GlobalCashFlowTypology"
不同。
除此之外,我不确定你在这里想要达到的目标,但是除了使用一个巨大的字符串来匹配包装器之外,还有更好的方法吗?
答案 1 :(得分:0)
只需将模板匹配缩小为:
<xsl:template match="flowTypologies">
<xsl:text>I should get here</xsl:text>
</xsl:template>
我想不出在这里使用密钥的理由。如果为最外层元素定义键,则键实际上位于错误的位置,因为它们只有一个。此外,您永远不应该依赖字符串的连接来限定模板匹配。例如,它有风险,因为所有实现都不会以相同的方式处理空格。