xsl 中枚举的值

Value of enum in xsl

我正在使用 java 并且我得到了一个枚举

public enum MyEnum {

    A("description of A"),
    B("description of B");

    private String description;

    MyEnum(String description) {
        this.description = description;
    }

    @Override
    public String toString() {
        return getBeschreibung();
    }

    public String getBeschreibung() { 
        return beschreibung;
    }

}

此外,我得到了一个 class,其中包含以下成员:

@XmlAccessorType(XmlAccessType.FIELD)
public class SomeValue {

    @XmlEnumValue(value = "myEnum")
    protected MyEnum myEnum;

}

与 getter 和 setter 分别。我得到了一个生成的 xml-file

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<someValue>
    <myEnum>A</myEnum>
</someValue>

我的 xsl 如下所示:

<xsl:for-each select="someValue">
    <td>
        <xsl:value-of select="myEnum" />
    </td>
</xsl:for-each>

我想要"description of A"而不是"A"。你能告诉我如何在我的 xsl 文件中实现这个吗?有什么方法可以读取枚举的值吗?

我遇到了同样的问题并找到了这个问题,但不幸的是没有答案。然而,在进一步挖掘之后,我找到了适合自己的解决方案。 5 年后回答这个问题有点太晚了,但希望如果有人再次偶然发现它,他们可能会发现它有帮助 -

首先,将 Enum class 导入 xsl -

<xsl:stylesheet xmlns:myEnum="xalan://path.to.your.package.MyEnum"/>

然后你需要在 MyEmum class 写一个静态方法,它将 Enum 作为值, return Enumdescription.

public String getDescription() {
    return description;
}

public static String getEnumDescription(String enumVal) {
        return getEnumFromString(enumVal).getDescription();
}

private static MyEnum getEnumFromString(String enumVal) {
    for (MyEnum enum : MyEnum.values()) {
        if (enum.name() == enumVal) {
            return enum;
        }
    }

    throw new IllegalArgumentException();
}

然后就可以直接调用静态getEnumDescription方法了-

<td>
    <xsl:value-of select="myEnum:getEnumDescription(myEnum)" />
</td>