У меня есть XML, который зацикливается 4 раза из-за присутствия attrQualMany в двух местах, каждое из которых имеет 2 значения. Так 2*2
Пример XML-сообщения
<document>
<ObjectId>
<ID>1000909090</ID>
<dlex>
<attrGroupMany name="streetinfo">
<row>
<attr name="streetcode">AS_DRAINED</attr>
<attrQualMany name="streetintake">
<value qual="en">dvif1</value>
<value qual="nl">dvif2</value>
</attrQualMany>
<attr name="streettype">BY_MEASURE</attr>
<attrQual name="streetbasis" qual="ONZ">5</attrQual>
<attrQual name="streetsize" qual="EA">1</attrQual>
<attrQualMany name="streetsizeDescription">
<value qual="en">sz1</value>
<value qual="hi">sz2</value>
</attrQualMany>
</row>
</attrGroupMany>
</dlex>
</ObjectId>
</document>
Я использую приведенный ниже XSLT
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
<xsl:output method="xml" indent="yes"/>
<xsl:template match="/document">
<CatalogObjectId>
<RelationshipData>
<Relationship>
<RelationType>ObjectId_Street</RelationType>
<RelatedObjectIds>
<xsl:for-each select="ObjectId/dlex/attrGroupMany[@name='streetinfo']">
<xsl:variable name="pos" select="position()"/>
<xsl:apply-templates select="row" mode="streetintake">
<xsl:with-param name="referenceKey" select="concat('ObjectId_Street-',$pos)" />
</xsl:apply-templates>
</xsl:for-each>
</RelatedObjectIds>
</Relationship>
</RelationshipData>
</CatalogObjectId>
</xsl:template>
<xsl:template match="row" mode="streetintake">
<xsl:param name="referenceKey" />
<xsl:variable name="streetcode" select="concat($referenceKey,'-',attr[@name='streetcode'],'-')"/>
<xsl:choose>
<xsl:when test="attrQualMany[@name='streetintake']/value">
<xsl:for-each select="attrQualMany[@name='streetintake']/value">
<xsl:apply-templates select="../.." mode="streetsize">
<xsl:with-param name="referenceKey" select="concat($streetcode,text(),'-',@qual)" />
</xsl:apply-templates>
</xsl:for-each>
</xsl:when>
<xsl:otherwise>
<xsl:apply-templates select="." mode="streetsize">
<xsl:with-param name="referenceKey" select="$streetcode" />
</xsl:apply-templates>
</xsl:otherwise>
</xsl:choose>
</xsl:template>
<xsl:template match="row" mode="streetsize">
<xsl:param name="referenceKey" />
<xsl:choose>
<xsl:when test="attrQualMany[@name='streetsizeDescription']/value">
<xsl:for-each select="attrQualMany[@name='streetsizeDescription']/value">
<xsl:call-template name="RelatedObjectId">
<xsl:with-param name="referenceKey" select="concat($referenceKey,'-',text(),'-',@qual)" />
</xsl:call-template>
</xsl:for-each>
</xsl:when>
<xsl:otherwise>
<xsl:call-template name="RelatedObjectId">
<xsl:with-param name="referenceKey" select="$referenceKey" />
</xsl:call-template>
</xsl:otherwise>
</xsl:choose>
</xsl:template>
<xsl:template name="RelatedObjectId">
<xsl:param name="referenceKey" />
<RelatedObjectId>
<xsl:attribute name="referenceKey">
<xsl:variable name="v_pos" select="position()"/>
<xsl:value-of select="concat($referenceKey,'-',$v_pos)" />
</xsl:attribute>
</RelatedObjectId>
</xsl:template>
</xsl:stylesheet>
Текущий вывод, который я получаю,
<?xml version="1.0" encoding="UTF-8"?>
<CatalogObjectId>
<RelationshipData>
<Relationship>
<RelationType>ObjectId_Street</RelationType>
<RelatedObjectIds>
<RelatedObjectId referenceKey="ObjectId_Street-1-AS_DRAINED-dvif1-en-sz1-en-1" />
<RelatedObjectId referenceKey="ObjectId_Street-1-AS_DRAINED-dvif1-en-sz2-hi-2" />
<RelatedObjectId referenceKey="ObjectId_Street-1-AS_DRAINED-dvif2-nl-sz1-en-1" />
<RelatedObjectId referenceKey="ObjectId_Street-1-AS_DRAINED-dvif2-nl-sz2-hi-2" />
</RelatedObjectIds>
</Relationship>
</RelationshipData>
</CatalogObjectId>
Но я хочу приращение для каждого цикла, и ожидаемый результат должен быть
<?xml version="1.0" encoding="UTF-8"?>
<CatalogObjectId>
<RelationshipData>
<Relationship>
<RelationType>ObjectId_Street</RelationType>
<RelatedObjectIds>
<RelatedObjectId referenceKey="ObjectId_Street-1-AS_DRAINED-dvif1-en-sz1-en-1" />
<RelatedObjectId referenceKey="ObjectId_Street-1-AS_DRAINED-dvif1-en-sz2-hi-2" />
<RelatedObjectId referenceKey="ObjectId_Street-1-AS_DRAINED-dvif2-nl-sz1-en-3" />
<RelatedObjectId referenceKey="ObjectId_Street-1-AS_DRAINED-dvif2-nl-sz2-hi-4" />
</RelatedObjectIds>
</Relationship>
</RelationshipData>
</CatalogObjectId>
Не могли бы вы пролить свет, где я должен разместить счетчик позиций, я пробовал много комбинаций, но не повезло