Xslt 2.0 Xslt2.0,如何识别字符串中正负数字的混合
我有一个这样的xml(见下文)。 使用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
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>