繁体   English   中英

如何在xsl中为变量或参数设置新值

[英]how to set a new value to variable or param in xsl

我需要一些关于xsl的帮助。 我在源xml中有一个日期属性,我需要知道它以前的值,因为我需要根据日期进行分类。 这是源xml。

source xml:

<root>
  <license id="a" expireDate="2010-02-01"/>
  <license id="b" expireDate="2010-02-01"/>
  <license id="c" expireDate="2010-02-01"/>
  <license id="d" expireDate="2010-02-04"/>
  <license id="e" expireDate="2010-02-04"/>
  <license id="f" expireDate="2010-02-12"/>
  <license id="g" expireDate="2010-02-12"/>
</root>

我需要将其转换为

<licenses>
   <expDate value="2010-02-01">
      <license>a</license>
      <license>b</license>
      <license>c</license>
   </expDate>
   <expDate value="2010-02-04">
      <license>d</license>
      <license>e</license>
   </expDate>
   <expDate value="2010-02-12">
      <license>f</license>
      <license>g</license>
   </expDate>
</licenses>

实际上,我可以转换源xml,它具有与给定格式不同的格式。 我读过一些文章,却找不到办法。 如何保留上一个日期值并检查它是否与当前日期值不同。

谢谢

您无法在XSLT中更改变量的值,但您不需要。 以下样式表:

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
    <xsl:key name="byDate" match="license" use="@expireDate" />
    <xsl:template match="/">
        <licenses>
            <xsl:apply-templates />
        </licenses>
    </xsl:template>
    <xsl:template
        match="license[generate-id() = 
                       generate-id(key('byDate', @expireDate)[1])]">
        <expDate value="{@expireDate}">
            <xsl:apply-templates select="key('byDate', @expireDate)"
                mode="group" />
        </expDate>
    </xsl:template>
    <xsl:template match="license" mode="group">
        <license>
            <xsl:value-of select="@id" />
        </license>
    </xsl:template>
    <xsl:template match="license" />
</xsl:stylesheet>

适用于此输入:

<root>
  <license id="a" expireDate="2010-02-01"/>
  <license id="b" expireDate="2010-02-01"/>
  <license id="c" expireDate="2010-02-01"/>
  <license id="d" expireDate="2010-02-04"/>
  <license id="e" expireDate="2010-02-04"/>
  <license id="f" expireDate="2010-02-12"/>
  <license id="g" expireDate="2010-02-12"/>
</root>

产生以下输出:

<licenses>
    <expDate value="2010-02-01">
        <license>a</license>
        <license>b</license>
        <license>c</license>
    </expDate>
    <expDate value="2010-02-04">
        <license>d</license>
        <license>e</license>
    </expDate>
    <expDate value="2010-02-12">
        <license>f</license>
        <license>g</license>
    </expDate>
</licenses>

注意:您的原始XML格式不正确。 我将许可证值移动到id属性。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM