Xslt 2.0 Xslt2.0,如何识别字符串中正负数字的混合

Xslt 2.0 Xslt2.0,如何识别字符串中正负数字的混合,xslt-2.0,Xslt 2.0,我有一个这样的xml(见下文)。 使用xslt2.0,我需要找出是否有任何一个包含正数和负数的混合 权重:正数/负数的连续字符串。。(分隔符=;) 20160124 1.2.5.4. 20160125 1.2.3.4. 20160126 1;-2.3.4. 谢谢好的,使用tokenize您可以提取之间的令牌,然后可以检查它们是否为整数,如果是,则转换它们,然后可以检查是否存在大于零和小于零的值: <xsl:transform xmlns:xsl="http://www.w3.org/1

我有一个这样的xml(见下文)。 使用xslt2.0,我需要找出是否有任何一个包含正数和负数的混合

权重:正数/负数的连续字符串。。(分隔符=;)


20160124
1.2.5.4.
20160125
1.2.3.4.
20160126
1;-2.3.4.

谢谢

好的,使用
tokenize
您可以提取
之间的令牌,然后可以检查它们是否为整数,如果是,则转换它们,然后可以检查是否存在大于零和小于零的值:

<xsl:transform xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="2.0"
    xmlns:xs="http://www.w3.org/2001/XMLSchema">


    <xsl:template match="@*|node()">
        <xsl:copy>
            <xsl:apply-templates select="@*|node()"/>
        </xsl:copy>
    </xsl:template>

    <xsl:template match="weights">
        <xsl:copy>
            <xsl:variable name="integers" select="for $token in tokenize(., ';')[. castable as xs:integer] return xs:integer($token)"/>
            <xsl:sequence select="(some $i in $integers satisfies $i gt 0) and (some $j in $integers satisfies $j lt 0)"/>
        </xsl:copy>
    </xsl:template>

</xsl:transform>

我修改了马丁的答案以满足我的需要

<xsl:transform xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="2.0" xmlns:xs="http://www.w3.org/2001/XMLSchema">
    <xsl:template match="/">
     <xsl:variable name="allWeights" select="string-join(//weights/text(), '')" />                     
     <xsl:variable name="weightTokens" select="for $token in tokenize($allWeights, ';')[. castable as xs:string] return xs:string($token)"/>
     <xsl:variable name="isMixOfPositiveNegativeWeights" select="(some $posToken in $weightTokens satisfies matches($posToken, '[0-9].*')) and (some $negToken in $weightTokens satisfies matches($negToken, '-.*'))"/>
     <xsl:value-of select="$isMixOfPositiveNegativeWeights" />
    </xsl:template>
</xsl:transform>

谢谢你,马汀。在下一篇评论中,我采用了核心概念,并根据自己的需要对其进行了修改。
<xsl:transform xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="2.0" xmlns:xs="http://www.w3.org/2001/XMLSchema">
    <xsl:template match="/">
     <xsl:variable name="allWeights" select="string-join(//weights/text(), '')" />                     
     <xsl:variable name="weightTokens" select="for $token in tokenize($allWeights, ';')[. castable as xs:string] return xs:string($token)"/>
     <xsl:variable name="isMixOfPositiveNegativeWeights" select="(some $posToken in $weightTokens satisfies matches($posToken, '[0-9].*')) and (some $negToken in $weightTokens satisfies matches($negToken, '-.*'))"/>
     <xsl:value-of select="$isMixOfPositiveNegativeWeights" />
    </xsl:template>
</xsl:transform>