У меня проблема с условным приращением для ввода ниже.
условие: В моем ожидаемом вводе 5 будет повторяться.Я хочу добавить версионность к элементу, если он повторяется и только если он имеет значение, равное 5
Вход
<?xml version="1.0"?><?xml-stylesheet type="text/xsl"?> <data> <rec>
<Pt>1</Pt>
</rec>
<rec>
<Pt>3</Pt>
</rec>
<rec>
<Pt>5</Pt>
</rec>
<rec>
<Pt>5</Pt>
</rec>
<rec>
<Pt>5</Pt>
</rec>
<rec>
<Pt>6</Pt>
</rec>
</data>
Ожидаемый вывод:
<?xml version="1.0" encoding="UTF-8"?>
<Record>
<PT>1</PT>
<DerivedPT>1</DerivedPT>
</Record>
<Record>
<PT>3</PT>
<DerivedPT>3</DerivedPT>
</Record>
<Record>
<PT>5</PT>
<DerivedPT>5.1</DerivedPT>
</Record>
<Record>
<PT>5</PT>
<DerivedPT>5.2</DerivedPT>
</Record>
<Record>
<PT>5</PT>
<DerivedPT>5.3</DerivedPT>
</Record>
<Record>
<PT>6</PT>
<DerivedPT>6</DerivedPT>
</Record>
У меня естьпробовал это XSLT:
<?xml version="1.0"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
version="1.0">
<xsl:template match="/">
<xsl:for-each select="data/rec">
<Record>
<PT>
<xsl:value-of select="Pt" />
</PT>
<DerivedPT>
<xsl:variable name="pt" select="Pt" />
<xsl:choose>
<xsl:when test="contains($pt,'5')">
<xsl:value-of
select="concat($pt,'.',count(preceding-sibling::rec/Pt[1])+1)" />
</xsl:when>
<xsl:otherwise>
<xsl:value-of select="$pt" />
</xsl:otherwise>
</xsl:choose>
</DerivedPT>
</Record>
</xsl:for-each>
</xsl:template>
</xsl:stylesheet>
Но вывод, который я получаю:
<?xml version="1.0" encoding="UTF-8"?>
<Record>
<PT>1</PT>
<DerivedPT>1</DerivedPT>
</Record>
<Record>
<PT>3</PT>
<DerivedPT>3</DerivedPT>
</Record>
<Record>
<PT>5</PT>
<DerivedPT>5.3</DerivedPT>
</Record>
<Record>
<PT>5</PT>
<DerivedPT>5.4</DerivedPT>
</Record>
<Record>
<PT>5</PT>
<DerivedPT>5.5</DerivedPT>
</Record>
<Record>
<PT>6</PT>
<DerivedPT>6</DerivedPT>
</Record>
Это потому, что он выбирает все теги. Какие изменения мне нужно сделать, так что потребуетсятолько PT, который равен 5.
<xsl:value-of
select="concat($pt,'.',count(preceding-sibling::rec/Pt[1])+1)" />