2

我试图通过这种解决方案远离程序方法,但我不确定这是否可行。

这是我的 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 的。

我确信这与我的“程序性思维”有关。:)

对此的任何帮助都会很棒!

谢谢,

4

1 回答 1

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>
于 2013-06-17T15:19:59.950 回答