0
我有一个要求,以获得基于优先级@schemeNames的值。如果@ schemeName ='TaxNumber'存在,则获取ID的值,否则如果@ schemeName ='PassportNumber',否则如果@schemeName没有值。获取该值后,如果它是Alpha,则需要检查或忽略前2个字符。另外,我需要考虑@schemeName中单词之间的空格。例如,如果我的@schemeName的值是“税号”或“税号”,则它是有效的。但是如果价值是这样的,那么它不应该验证这个值。XSLT使用正则表达式
这里是我的XSLT:
<xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes"/>
<xsl:template match="/">
<Result>
<xsl:for-each select="/Record/Data/ID">
<xsl:choose>
<xsl:when test="matches(lower-case(.[@schemeName]),'^tax\s+number')">
<xsl:if test="matches(substring(.,1,2),'^[a-zA-Z]+$')">
<xsl:value-of select="substring(.,3)"/>
</xsl:if>
</xsl:when>
<xsl:when test="matches(lower-case(.[@schemeName]),'^passport\s+number')">
<xsl:if test="matches(substring(.,1,2),'^[a-zA-Z]+$')">
<xsl:value-of select="substring(.,3)"/>
</xsl:if>
</xsl:when>
<xsl:when test=".[@schemeName='']">
<xsl:if test="matches(substring(.,1,2),'^[a-zA-Z]+$')">
<xsl:value-of select="substring(.,3)"/>
</xsl:if>
</xsl:when>
</xsl:choose>
</xsl:for-each>
</Result>
</xsl:template>
</xsl:stylesheet>
输入:
<Record>
<Data>
<ID schemeName="TaxNumber">PT123457</ID>
<ID schemeName="PassportNumber">PT098732</ID>
<ID schemeName="LicenseNumber">PT445423</ID>
<ID schemeName="">PT7566435</ID>
</Data>
</Record>
生成的输出:
<Result>7566435</Result>
产生的输出是从为空的@schemeName到来。它应该来自TaxNumber,因为它存在。检查@schemeNames时,我的情况有问题。
我正在使用XSLT v2.0。谢谢!
感谢您的反馈意见。它确实有效,但唯一的问题是我只需要检查前2个字符是否为alpha。如果在其他位置有字母,我无所谓。 – Nathan
如果它是一个有效的schemeName,并且前2个字母不是alpha,那么你没有输出? –
如果它是一个有效的schemeName,并且前两个字母不是alpha,则按原样获取该值。 – Nathan