模板匹配父节点的文本值

时间:2014-08-14 21:20:10

标签: xslt

这是一些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做了一个值,它确实产生了在谓词中测试的值,但规则永远不会触发。

2 个答案:

答案 0 :(得分:1)

  

然而它不匹配。

它不匹配,因为XML区分大小写:"GlobalCashflowTypology""GlobalCashFlowTypology"不同。

除此之外,我不确定你在这里想要达到的目标,但是除了使用一个巨大的字符串来匹配包装器之外,还有更好的方法吗?

答案 1 :(得分:0)

只需将模板匹配缩小为:

<xsl:template  match="flowTypologies">
  <xsl:text>I should get here</xsl:text>
</xsl:template>

我想不出在这里使用密钥的理由。如果为最外层元素定义键,则键实际上位于错误的位置,因为它们只有一个。此外,您永远不应该依赖字符串的连接来限定模板匹配。例如,它有风险,因为所有实现都不会以相同的方式处理空格。