我有一个关于<xsl:template match="">和<xsl:apply-templates/>的一般性问题。
在这种情况下,我匹配元素E1EDP01。但是没有所有的E1EDP01元素应该匹配,只有一个特定的范围。
但是,现在,什么是正确的方式,只匹配一定范围的元素?
这样做是正确的吗:
<xsl:apply-templates select="E1EDP01"/>以及限制E1EDP01范围的模板。
<xsl:template match="E1EDP01[not(PSTYV='ZDAE')][E1EDP02[QUALF='001']/ZEILE]">
...
</xsl:template>,还是我必须将应用模板更改为:
<xsl:apply-templates select="E1EDP01[not(PSTYV='ZDAE')][E1EDP02[QUALF='001']/ZEILE]"/>发布于 2013-02-19 13:15:04
这两种方法都有效,但它们所表达的意图略有不同。特定的匹配模板表示“这是您应该始终处理此类E1EDP01元素的方式”,而<xsl:apply-templates select="E1EDP01"/>则表示“现在处理所有的E1EDP01元素”。而拥有一个通用模板和一个特定的应用程序意味着“我现在就想处理这些特定的E1EDP01元素(但我可能希望稍后处理其他元素)”和“这是处理任何E1EDP01的方法”。
哪种方法更好,实际上取决于[not(PSTYV='ZDAE')][E1EDP02[QUALF='001']/ZEILE]是元素应该处理的方式所固有的,还是特定于您希望在样式表中的特定位置所做的事情。例如,如果我有一些描述金融事务的XML,并且有一条规则,负数总是必须显示在红色框中,那么我可以定义
<xsl:template match="amount[. < 0]">
<redbox><xsl:value-of select="."/></redbox>
</xsl:template>
<xsl:template match="amount"><xsl:value-of select="."/></xsl:template>如果我想包含一个包含所有负数的摘要红框,但通常在其他地方显示数量,那么我可能会选择对amount使用单个模板,然后在apply-templates点进行筛选。
<redbox>
<xsl:apply-templates select="amount[. < 0]" />
</redbox>你必须选择对你的任务最有意义的方法。
发布于 2013-02-19 12:54:37
如果这两种方法都适用于您想要做的事情,那么只需选择对XSLT最有意义的一种。
https://stackoverflow.com/questions/14957985
复制相似问题