【发布时间】:2017-04-18 04:04:19
【问题描述】:
我需要根据@schemeNames 的优先级获取值。如果存在@schemeName='TaxNumber',则获取ID 的值,否则如果@schemeName='PassportNumber',否则如果@schemeName 没有值。获取到值后,如果是 Alpha,则需要检查或忽略第 1 2 个字符。另外,我需要考虑@schemeName 中单词之间的空格。例如,如果我的 @schemeName 的值为“税号”或“税号”,则它是有效的。但是如果值是这样的,'t axNum Ber',它不应该验证这个值。
这是我的 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。谢谢!
【问题讨论】: