1

<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]"/>
4

2 回答 2

4

两者都有效,但它们表达的意图略有不同。特定的匹配模板说“这就是你应该始终处理这种 E1EDP01元素的方式”,并且<xsl:apply-templates select="E1EDP01"/>说“E1EDP01现在处理我的所有元素”。而拥有一个通用模板和一个特定的应用程序表示“我现在想处理这些特定 E1EDP01元素(但我以后可能想处理其他元素)”和“这就是你处理任何元素的方式E1EDP01”。

哪种方法更好实际上取决于它[not(PSTYV='ZDAE')][E1EDP02[QUALF='001']/ZEILE]是应该处理元素的方式所固有的,还是特定于您想要在样式表中的某个特定位置执行的操作。例如,如果我有一些描述金融交易的 XML,并且我有一个规则是负金额必须始终显示在红色框中,那么我可以定义

<xsl:template match="amount[. &lt; 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[. &lt; 0]" />
</redbox>

您必须选择对您的任务最有意义的方法。

于 2013-02-19T13:15:04.120 回答
1

如果两者都适用于您想要做的事情,那么只需选择对您的 XSLT 最有意义的一个。

于 2013-02-19T12:54:37.030 回答