使用xsl将一个xml转换为另一个xml模式。
如何将一个xml的枚举映射到另一个xml。
示例: xsd 1:
<xsd:element name="Hindi">
<xsd:simpleType>
<xsd:restriction base="xsd:string">
<xsd:enumeration value="Chay" />
<xsd:enumeration value="Roti" />
</xsd:restriction>
</xsd:simpleType>
xsd 2:
<xsd:element name="Hindi">
<xsd:simpleType>
<xsd:restriction base="xsd:string">
<xsd:enumeration value="Tea" />
<xsd:enumeration value="Bread" />
</xsd:restriction>
</xsd:simpleType>
如何使用xsl将chay与Tea映射。
输入xml:
<Hindi>Chay</Hindi>输出xml:
<Hindi>Tea</Hindi>发布于 2018-12-15 10:56:07
使用xsl:when解决这一问题
<English>
<xsl:choose>
<xsl:when test="Hindi = 'Chay'">Tea</xsl:when>
<xsl:when test="Hindi = 'Roti'">Bread</xsl:when>
</xsl:choose>
<English> 发布于 2018-12-07 09:04:45
我希望您只使用两种语言,否则我的代码将无法工作。我只是快速地对它进行了编码,所以它可能不是最时髦的代码。记住,条目必须有相同的顺序。因此,如果您想翻译一个单词,在位置x在枚举中,x必须是该词在其他枚举中的位置。
字典变量:
<xsl:variable name="dict">
<element name="Hindi">
<simpleType>
<restriction base="xsd:string">
<enumeration value="Inp1" />
<enumeration value="Inp2" />
</restriction>
</simpleType>
</element>
<element name="English">
<simpleType>
<restriction base="xsd:string">
<enumeration value="Bread1" />
<enumeration value="Bread2" />
</restriction>
</simpleType>
</element>
</xsl:variable>匹配模板:
<!-- This will match on every node with a specified element/@name in the dictionary -->
<xsl:template match="*[name() = $dict/element/@name]">
<xsl:variable name="fromLanguage" select="name()"/>
<xsl:variable name="wordToTranslate" select="."/>
<!-- My translation requires the same order of enumerations in order to do it correctly -->
<!-- I am counting the preceding siblings, so we can take the xth element of the other dictionary -->
<xsl:variable name="precSiblings" select="$dict/element[@name = $fromLanguage]//enumeration[@value = $wordToTranslate][1]/count(preceding-sibling::*)"/>
<!-- Renaming the language node -->
<xsl:element name="{$dict/element[@name != $fromLanguage]/@name}">
<xsl:value-of select="$dict/element[@name != $fromLanguage]//enumeration[$precSiblings + 1]/@value"/>
</xsl:element>
</xsl:template>https://stackoverflow.com/questions/53664812
复制相似问题