私は XSL を初めて使用し、異常値を JAXB アノテーション付きクラスの既知の列挙型に変換するのに少し苦労しています。次のように定義された列挙型があります。
@XmlType( name = "accountGroup" )
@XmlEnum
public enum AccountGroup
{
SOLD_TO, SHIP_TO, BILL_TO;
public static AccountGroup fromValue( String v )
{
return valueOf( v );
}
public String value()
{
return name();
}
}
この列挙型のインスタンスは、私のターゲット クラスに accountGroup として含まれています。
これらの列挙値の 1 つがソース XML にある場合、すべて問題ありません。たとえば、あるシステムは次のように渡します。
<acctType>SOLD_TO</acctType>
この入力の XSL は、これを取得して Java クラスが期待する XML に変換し、値が列挙型に設定されます。
<xsl:element name="accountGroup"><xsl:value-of select="acctType"/></xsl:element>
ただし、1 つのシステムが変換する必要があるさまざまな値を渡しているため、それらの入力には別の XSL テンプレートを使用しています。ソース値は次のようになります。
<rn4:displayValue>Z001, Sold-to party</rn4:displayValue>
私はこれを次のようなもので変換しようとしています:
<xsl:element name="accountGroup">
<xsl:choose>
<xsl:when test="substring-before(rn4:matched/rn4:kTOKD/rn4:displayValue,',')='Z001'">
SOLD_TO
</xsl:when>
</xsl:choose>
</xsl:element>
部分文字列が Z001 に解決されることをテストしましたが、列挙値が設定されません。
私は何をする必要がありますか?