首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >XSLT1.0:将条件放入match属性还是应用-模板?

XSLT1.0:将条件放入match属性还是应用-模板?
EN

Stack Overflow用户
提问于 2013-02-19 12:51:52
回答 2查看 978关注 0票数 1

我有一个关于<xsl:template match=""><xsl:apply-templates/>的一般性问题。

在这种情况下,我匹配元素E1EDP01。但是没有所有的E1EDP01元素应该匹配,只有一个特定的范围。

但是,现在,什么是正确的方式,只匹配一定范围的元素?

这样做是正确的吗:

代码语言:javascript
复制
<xsl:apply-templates select="E1EDP01"/>

以及限制E1EDP01范围的模板。

代码语言:javascript
复制
<xsl:template match="E1EDP01[not(PSTYV='ZDAE')][E1EDP02[QUALF='001']/ZEILE]">
...
</xsl:template>

,还是我必须将应用模板更改为:

代码语言:javascript
复制
<xsl:apply-templates select="E1EDP01[not(PSTYV='ZDAE')][E1EDP02[QUALF='001']/ZEILE]"/>
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-02-19 13:15:04

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

哪种方法更好,实际上取决于[not(PSTYV='ZDAE')][E1EDP02[QUALF='001']/ZEILE]是元素应该处理的方式所固有的,还是特定于您希望在样式表中的特定位置所做的事情。例如,如果我有一些描述金融事务的XML,并且有一条规则,负数总是必须显示在红色框中,那么我可以定义

代码语言:javascript
复制
<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点进行筛选。

代码语言:javascript
复制
<redbox>
  <xsl:apply-templates select="amount[. &lt; 0]" />
</redbox>

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

票数 4
EN

Stack Overflow用户

发布于 2013-02-19 12:54:37

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

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14957985

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档