假设我有以下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>
这是失败的,但是有人可以提出类似的建议吗? 谢谢!
调整模板上的匹配模式,以包含
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>
.