if语句里面可以加模板吗? XSLT

问题描述 投票:0回答:1

假设我有以下xml

<Requirement>
   <Name id="001" code="1">Hello</Name>
   <Day>Monday</Day>
   <Status>Open<Status>
   .
   .
   .
   --- ALOT OF OTHER DATA ---
</Requirement>

现在,我有一个 xslt

.
.
<xsl:template match="/">
   <xml>
      <ID>
        <xsl:value-of select="/Requirement/Name/text()" />
      </ID>
      <xsl:apply templates select="@*|node()" />
   </xml>
</xsl:template>
<xsl:template match="@*|node()">
   <xsl:copy>
       <xsl:apply-templates select"@*|node()"/>
   </xsl:copy>
</xsl:template>
.
.

我不想摆脱这个复制模板,但是我确实需要向这个 xslt 添加一些东西。我需要一个 if 语句,如果 Name = Hello 并且如果 Status 是 Open 那么 Day 就是星期五。如果 Name 不是 Hello,则不需要更改。我可以在 if 语句中添加模板吗?

<xsl:if test="Name='Hello' & Status='Open'">
   <xsl:template match="Day/text()">
      <xsl:value-of select="Friday" />
   <xsl:template>
</xsl:if>

这是失败的,但是有人可以提出类似的建议吗? 谢谢!

xml if-statement templates xslt xslt-1.0
1个回答
0
投票

调整模板上的匹配模式,以包含

Name
同级值为“Hello”和 Status 同级值为“Open”的条件:

<xsl:template match="Requirement[Name='Hello' and Status='Open']/Day/text()">
  <xsl:value-of select="'Friday'" />
<xsl:template>

然后要么匹配改成星期五,要么不匹配打默认复制的模板

请注意,我添加了引号使其成为字符串文字,而不是寻找名为

Friday
的元素的 XPath,或者您可以改为使用
<xsl:text>Friday</xsl:text>
.

© www.soinside.com 2019 - 2024. All rights reserved.