Как добавить инкрементный идентификатор к существующему значению - PullRequest
0 голосов
/ 14 февраля 2019

У меня есть следующий xml:

enter image description here

Я хотел бы объединить столбец postioName с инкрементным идентификатором, например:

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 голосов
/ 14 февраля 2019

Используйте <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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...