Как XSL может генерировать уникальный атрибут id для каждого элемента в документе 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()))
Знающие люди, такие как Майкл Кей, предупреждают, что <xsl:number/> неэффективно (иногда O (N ^ 2)) и следует избегать, если это возможно.
<xsl:number/>
Переключение с использованием числа () с уровнем и счетом, кажется, добилось цели.
Спасибо
<?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>