XSLT1. 0 поддержание количества дочерних узлов для генерации идентификатора


Я хочу сосчитать нет. дочерних узлов для конкретного повторяющегося родительского узла. Мне нужно, чтобы этот счетчик сохранял идентификатор для конкретного элемента после преобразования.

Ниже приведен формат запроса.xml, который у меня есть

<Party><Notes><Notes><Party>
<Party><Notes><Notes></Party>

Транформированный xml должен быть:

<Attachment id=1></Attachment>
<Attachment id=2></Attachment>
<Attachment id=3></Attachment>
<Attachment id=4></Attachment>

Я попробовал использовать :

<xsl:value-of select="concat('Attachment',count(preceding-sibling::Notes))" />

Но это не дает правильных значений. Любое руководство поможет мне решить эту проблему.

1 2

1 ответ:

Вы можете использовать count(preceding::Notes)+1, но я предпочитаю использовать xsl:number.

Пример...

XML (исправлено, чтобы быть хорошо сформированным)

<request>
    <Party>
        <Notes/>
    </Party>
    <Party>
        <Notes/>
    </Party>
</request>

XSLT 1.0

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
    <xsl:output indent="yes"/>
    <xsl:strip-space elements="*"/>

    <xsl:template match="Notes">
        <Attachment>
            <xsl:attribute name="id">
                <xsl:number level="any"/>
            </xsl:attribute>
        </Attachment>
    </xsl:template>

</xsl:stylesheet>

Вывод

<Attachment id="1"/>
<Attachment id="2"/>