增加标记值或添加标记xsl

时间:2012-11-30 14:51:35

标签: java xml xls

我有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>

1 个答案:

答案 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>

这就是我所做的,看起来它正在发挥作用。