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

Xslt2.0, How to identify the mix of positive and negative numbers inside strings

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

权重:positive/negative 数字的连接字符串..(分隔符 = ;)。

<PriceInfo>
    <price>
        <date>20160124</date>
        <weights>1;2;5;4;</weights>
    </price>
    <price>
        <date>20160125</date>
        <weights>1;2;3;4;</weights>
    </price>
    <price>
        <date>20160126</date>
        <weights>1;-2;3;4;</weights>
    </price>
</PriceInfo>

谢谢

嗯,用tokenize可以把;之间的token提取出来,然后可以判断是不是整数,如果是就转换,然后可以判断是否有更大的比和任何小于零的:

<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>

我修改了 Martin 的答案以满足我的需要。

<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>