xsl:analyze-string
は文字列のsequenceの代わりに1つの文字列を返すことはできますか?XSLT - make xsl:analyze-stringは文字列のシーケンスではなく文字列を返しますか?
背景:パターンマッチングをカプセル化するxsl:function
にxsl:analyze-string
を使用したいと思います。理想的には、この関数は、要素でソート基準として使用するxs:string
を返す必要があります。
瞬間、私はxsl:analyze-string
は、一連の文字列を返し、xsl:sort
は、ソート基準として、このようなシーケンスを受け付けないので、関数呼び出しのすべての結果に文字列の参加を()を適用しなければなりません。この入力で
<?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>
:スタイルシートの24行を参照してくださいXSを返すために、機能:文字列の代わりに、一連の私の例では
<?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を変更する方法はありますか?
おかげで多くのことを完璧に動作します! – tohuwawohu