0

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

如果 Retry 不存在于 xml 中,则将 Retry 值增加 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>
4

1 回答 1

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>

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

于 2012-11-30T17:17:20.240 回答