我试图将时区值从一个系统转换为另一个值以推送到另一个系统。
一切都很好我希望他们使用州名而不是城市名,但没关系,这是一个整合,不能在两个系统中改变,只是相互匹配。
我使用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>
提前为任何帮助干杯
答案 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>
如果源值与其中一个输入值匹配,则使用匹配条目的输出值作为输出;否则源输入值将按传递给输出。
请注意,您的架构未提供实现此替换的必要信息。