私は、優先順位@schemeNamesに基づいて値を取得するための要件があります。 @ schemeName = 'TaxNumber'がある場合はIDの値を取得し、@ schemeName = 'PassportNumber'の場合はIDの値を取得し、@schemeNameが値でない場合はIDの値を取得します。値を取得したら、最初の2文字がアルファであるかどうかをチェックしたり、無視したりする必要があります。また、@schemeNameの単語間のスペースも考慮する必要があります。たとえば、私の@schemeNameの値が 'Tax Number'または 'taxnumber'の場合、それは有効です。しかし、値がこのような場合、 't axNum Ber'は、この値を検証すべきではありません。正規表現パターンを使用する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>
INPUT:
<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>
が生成される出力がnullの@schemeNameから来ています。 TaxNumberが存在するのでTaxNumberから来るはずです。 @schemeNamesをチェックするときに私の状態に何か問題があります。
私はXSLT v2.0を使用しています。ありがとうございました!
フィードバックありがとうございます。それはうまくいきましたが、唯一の問題は最初の2文字がアルファであるかどうかを確認することです。他のポジションに手紙があるかどうかは関係ありません。 – Nathan
有効なschemeNameで、最初の2文字がアルファでない場合、出力はありませんか? –
有効なschemeNameで、最初の2文字がアルファでない場合は、そのまま値を取得します。 – Nathan