我有xml输入消息:
<Message>
<Header>
<Timestamp>2010-10-04T14:43:12.361-04:00</Timestamp>
</Header>
</Message>
我需要通过xslt传递它:
<Message>
<Header>
<Timestamp>2010-10-04T14:43:12.361-04:00</Timestamp>
<Retry>1</Retry> <!-- added -->
</Header>
</Message>
如果xml中不存在重试 如果它在那里,则将重试值增加为1。
<Message>
<Header>
<Timestamp>2010-10-04T14:43:12.361-04:00</Timestamp>
<Retry>2</Retry> <!-- incremented -->
</Header>
</Message>
你能帮忙吗?
如果没有,我有代码添加值,如果存在标记,如何增加它以增加:
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0" >
<xsl:param name="ename">Retry</xsl:param>
<xsl:param name="evalue">1</xsl:param>
<xsl:output method="xml" encoding="utf-8"/>
<xsl:template match="@*|node()">
<xsl:copy>
<xsl:apply-templates select="@*|node()" />
</xsl:copy>
</xsl:template>
<xsl:template match="Header">
<xsl:copy>
<xsl:apply-templates/>
<xsl:if test="not(Retry)">
<xsl:element name="{$ename}"><xsl:value-of select="$evalue"/></xsl:element>
</xsl:if>
</xsl:copy>
</xsl:template>
</xsl:stylesheet>
答案 0 :(得分:2)
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0" >
<xsl:param name="ename">Retry</xsl:param>
<xsl:param name="evalue">1</xsl:param>
<xsl:output method="xml" encoding="utf-8"/>
<xsl:variable name="number" select="//Retry" />
<xsl:template match="@*|node()">
<xsl:copy>
<xsl:apply-templates select="@*|node()" />
</xsl:copy>
</xsl:template>
<xsl:template match="//Retry" />
<xsl:template match="Header">
<xsl:copy>
<xsl:apply-templates/>
<xsl:if test="not(Retry)">
<xsl:element name="{$ename}"><xsl:value-of select="$evalue"/></xsl:element>
</xsl:if>
<xsl:if test="Retry">
<xsl:element name="{$ename}"><xsl:value-of select="$number + 1 "/> </xsl:element>
</xsl:if>
</xsl:copy>
这就是我所做的,看起来它正在发挥作用。