如何将增量ID合并为现有值

时间:2019-02-13 21:57:32

标签: xslt

我有以下xml:

enter image description here

我想将postioName列的增量ID串联起来,例如:

enter image description here

到目前为止,我已经成功使用函数“ generate-id()”实现了类似的目标,但结果与我的期望不尽相同:

enter image description here

有没有更好的方法来实现这一目标?

我的操作方式是:

<xsl:stylesheet version="3.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:fn="http://www.w3.org/2005/xpath-functions">
	<xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes"/>
	<xsl:strip-space elements="*"/>
	<!-- Identity transform -->
	<xsl:template match="@* | node()">
		<xsl:copy>
			<xsl:apply-templates select="@* | node()"/>
		</xsl:copy>
	</xsl:template>
	<xsl:template match="/IDS/records/positionName">
		<xsl:copy>
			<xsl:value-of select="../positionName"/>
			<xsl:value-of select="'_'"/>
			<xsl:value-of select="generate-id()"/>
		</xsl:copy>
	</xsl:template>
</xsl:stylesheet>

<IDS>
	<records>
		<positionId>a</positionId>
		<positionName>ID</positionName>
		<maturityDate>20251217</maturityDate>
	</records>
	<records>
		<positionId>b</positionId>
		<positionName>ID</positionName>
		<maturityDate>20251217</maturityDate>
	</records>
	<records>
		<positionId>c</positionId>
		<positionName>ID</positionName>
		<maturityDate>20251217</maturityDate>
	</records>
</IDS>

1 个答案:

答案 0 :(得分:2)

使用<xsl:number count="records"/>来生成数字<xsl:value-of select=". || '_'"/><xsl:number count="records"/>,这样就形成了完整的XSLT 3样式表

<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
    xmlns:xs="http://www.w3.org/2001/XMLSchema"
    exclude-result-prefixes="#all"
    version="3.0">

  <xsl:mode on-no-match="shallow-copy"/>

  <xsl:template match="/IDS/records/positionName">
      <xsl:copy>
        <xsl:value-of select=". || '_'"/>
        <xsl:number count="records"/> 
      </xsl:copy>
  </xsl:template>

</xsl:stylesheet>

https://xsltfiddle.liberty-development.net/ncdD7m5/1