XSLT检查枚举值或默认为其他值

时间:2014-05-15 02:20:52

标签: xml xslt

我试图将时区值从一个系统转换为另一个值以推送到另一个系统。

一切都很好我希望他们使用州名而不是城市名,但没关系,这是一个整合,不能在两个系统中改变,只是相互匹配。

我使用XSLT将1 xml文档翻译成另一个文档来执行此操作。

来源系统中,时区字符串为以下之一:

Australia/Adelaide
Australia/Brisbane
Australia/Canberra
Australia/Darwin
Australia/Hobart
Australia/Melbourne
Australia/Perth
Australia/Sydney

目标系统中,时区按以下方式设置:

Australia/Adelaide
Australia/Brisbane
Australia/Canberra,Melbourne,Sydney
Australia/Darwin
Australia/Hobart
Australia/Perth

我知道我可以使用<xsl:choose>并使用<xs:when>等来确定每个字符串,但想学习如何比较来自源的内容与枚举源类型,如果存在则使用它,如果它不存在则使用默认值。这可能。

xslt 中的枚举是根据目标系统定义的,因为它需要:

<xs:simpleType name="timeZoneType">
    <xs:restriction base="xs:string">
        <xs:enumeration value="Australia/Canberra,Melbourne,Sydney" />
        <xs:enumeration value="Australia/Adelaide" />
        <xs:enumeration value="Australia/Brisbane" />
        <xs:enumeration value="Australia/Darwin" />
        <xs:enumeration value="Australia/Hobart" />
        <xs:enumeration value="Australia/Perth" />
    </xs:restriction>
</xs:simpleType>

提前为任何帮助干杯

2 个答案:

答案 0 :(得分:1)

如果您可以使用架构感知的XSLT 2.0处理器,则可以

<xsl:if test="$in castable as timeZoneType">

如果你不能,那么你必须手工制作它。您当然可以通过XSLT转换处理模式文档来生成XSLT代码。

答案 1 :(得分:1)

  

希望学习如何比较从源头进入的内容   枚举源类型,如果它存在则使用它,如果它不存在   然后使用默认值。

在XSLT 1.0(至少)中,我认为最好使用XML格式的外部查找表,例如:

<lookup>
    <entry>
        <input>Australia/Canberra</input>
        <input>Australia/Melbourne</input>
        <input>Australia/Sydney</input>
        <output>Australia/Canberra,Melbourne,Sydney</output>
    </entry>
</lookup>

如果源值与其中一个输入值匹配,则使用匹配条目的输出值作为输出;否则源输入值将按传递给输出

请注意,您的架构未提供实现此替换的必要信息。