Можно ли заставить xsl:analyze-string
возвращать одну строку вместо последовательности строк?
Справочная информация: я хотел бы использовать xsl:analyze-string
в xsl:function
, который должен инкапсулировать сопоставление с образцом. В идеале функция должна возвращать xs:string
для использования в качестве критерия сортировки в элементе xsl:sort
.
На данный момент мне нужно применить string-join () к каждому результату вызова функции, поскольку xsl:analyze-string
возвращает последовательность строк, а xsl:sort
не принимать такую последовательность в качестве критерия сортировки. Смотрите строку 24 таблицы стилей:
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="2.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:my="www.my-personal-namespa.ce"
xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xsl:output indent="yes" method="xml" />
<xsl:function name="my:sortierung" >
<xsl:param name="inputstring" as="xs:string"/>
<xsl:analyze-string select="$inputstring" regex="[0-9]+">
<xsl:matching-substring>
<xsl:value-of select="format-number(number(.), '00000')" />
</xsl:matching-substring>
<xsl:non-matching-substring>
<xsl:value-of select="." />
</xsl:non-matching-substring>
</xsl:analyze-string>
</xsl:function>
<xsl:template match="/input">
<result>
<xsl:apply-templates select="value" >
<xsl:sort select="string-join((my:sortierung(.)), ' ')" />
</xsl:apply-templates>
</result>
</xsl:template>
<xsl:template match="value">
<xsl:copy-of select="." />
</xsl:template>
</xsl:stylesheet>
с этим входом:
<?xml version="1.0" encoding="UTF-8"?>
<input>
<value>A 1 b 120</value>
<value>A 1 b 1</value>
<value>A 1 b 2</value>
<value>A 1 b 1a</value>
</input>
В моем примере, есть ли способ изменить функцию xsl: так, чтобы она возвращала строку xs: вместо последовательности?