Как XSL может генерировать атрибут уникального идентификатора для каждого элемента в XML-документе с помощью XSL, где идентификатор должен быть числовым? XLS ниже работ за исключением того, что сгенерированные идентификаторы являются алфавитно-цифровыми и мне нужно числовой?
<?xml version='1.0' encoding='utf-8'?>
<xsl:stylesheet version='1.0' xmlns:xsl='http://www.w3.org/1999/XSL/Transform'
xmlns:msxsl='urn:schemas-microsoft-com:xslt' exclude-result-prefixes='msxsl'>
<xsl:output method='xml' indent='yes'/>
<xsl:template match='*'>
<xsl:copy>
<xsl:attribute name='ElementID'>
<xsl:value-of select='generate-id()'/>
</xsl:attribute>
<xsl:apply-templates/>
</xsl:copy>
</xsl:template>
</xsl:stylesheet>
Спасибо.
Вы всегда можете использовать :
concat(count(ancestor::node()),
'00000000',
count(preceding::node()))
Знающие люди, такие как Майкл Кей, предупреждают, что
неэффективен (иногда O (N ^ 2)) и по возможности следует избегать.
Переключение с помощью number () с level и count, похоже, помогло.
Спасибо
<?xml version='1.0' encoding='utf-8'?>
<xsl:stylesheet version='1.0' xmlns:xsl='http://www.w3.org/1999/XSL/Transform'
xmlns:msxsl='urn:schemas-microsoft-com:xslt' exclude-result-prefixes='msxsl'>
<xsl:output method='xml' indent='yes'/>
<xsl:template match='*'>
<xsl:copy>
<xsl:attribute name='ElementID'>
<xsl:number level='any' count='*' />
</xsl:attribute>
<xsl:copy-of select="@*"/><!--copy of existing all attributes-->
<xsl:apply-templates/>
</xsl:copy>
</xsl:template>
</xsl:stylesheet>