我试图远离使用此解决方案的程序方法,我不确定是否可能。
这是我的XML:
<countData>
<count countId="37" name="Data Response 1">
<year yearId="2013">
<month monthId="5">
<day dayId="23" countVal="6092"/>
<day dayId="24" countVal="6238"/>
<day dayId="27" countVal="6324"/>
<day dayId="28" countVal="6328"/>
<day dayId="29" countVal="3164"/>
</month>
<day dayId="23" countVal="7000"/>
<day dayId="24" countVal="7000"/>
<day dayId="27" countVal="7000"/>
<day dayId="28" countVal="7000"/>
<day dayId="29" countVal="7000"/>
</month>
</year>
</count>
<count countId="39" name="Data Response 2">
<year yearId="2013">
<month monthId="5">
<day dayId="23" countVal="675"/>
<day dayId="24" countVal="709"/>
<day dayId="27" countVal="754"/>
<day dayId="28" countVal="731"/>
<day dayId="29" countVal="377"/>
</month>
</year>
</count>
我想为37或39的所有count / @ countIds应用模板(在本例中)。这就是我的位置:
<xsl:template match="/">
<xsl:apply-templates mode="TimeFrame"/>
</xsl:template>
<xsl:template match="*" mode="TimeFrame">
<xsl:if test="count[@countId=37] or count[@countId=39]">
<magic>Only hitting this once for countId 37</magic>
</xsl:if>
</xsl:template>
由于我正在以多种不同的方式处理相同的响应,因此我将使用“模式”设置相当多的模板。
我不确定我是如何错过“范围”匹配而只得到1。
我确信这与我的“程序性思维”有关。 :)
对此的任何帮助都会很棒!
谢谢,
答案 0 :(得分:0)
您的主模板<xsl:template match="/">
仅运行一次 - 即<countData>
元素。
这意味着您忘记了递归:
<xsl:template match="*" mode="TimeFrame">
<xsl:if test="count[@countId=37] or count[@countId=39]">
<magic>Only hitting this once for countId 37</magic>
</xsl:if>
<xsl:apply-templates mode="TimeFrame"/> <!-- ! -->
</xsl:template>
...或者您未能为主模板设置正确的上下文:
<xsl:template match="/countData"><!-- ! -->
<xsl:apply-templates mode="TimeFrame"/>
</xsl:template>
<!-- or, alternatively -->
<xsl:template match="/">
<xsl:apply-templates select="countData/*" mode="TimeFrame"/>
</xsl:template>