gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-01 11:57:33 25 4
gpt4 key购买 nike

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

关于xslt - 如何在xsl中为变量或参数设置新值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5525089/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com