在父节点的文本值模板匹配(Template match on the text value of a

2019-10-20 17:36发布

下面是一些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样式我试图与撒克逊6.5和Xalan改造它。

我做了一个价值上flowTypologies和它产生于谓词被测试的值,但规则永远不会触发。

Answer 1:

但是它不匹配。

它不匹配,因为XML是大小写敏感的: "GlobalCashflowTypology"是不一样的东西"GlobalCashFlowTypology"

这且不说,我不知道你想在这里实现什么,但肯定有很多比使用一个巨大的字符串相匹配的包装更好的办法?



Answer 2:

简单的模板匹配减小到:

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

我想不出理由来了这里使用的密钥。 键是真的错了地方,如果他们在最外层的元素定义,因为只有其中之一。 此外,你不应该依赖于字符串的串联资格模板匹配。 例如,它是有风险的,因为空白不以同样的方式通过所有实现处理。



文章来源: Template match on the text value of a parent node
标签: xslt