首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >XSLT枚举映射

XSLT枚举映射
EN

Stack Overflow用户
提问于 2018-12-07 07:07:48
回答 2查看 1.6K关注 0票数 0

使用xsl将一个xml转换为另一个xml模式。

如何将一个xml的枚举映射到另一个xml。

示例: xsd 1:

代码语言:javascript
复制
<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:

代码语言:javascript
复制
<xsd:element  name="Hindi">
<xsd:simpleType>
    <xsd:restriction base="xsd:string">
        <xsd:enumeration value="Tea" />
        <xsd:enumeration value="Bread" />
    </xsd:restriction>
</xsd:simpleType>

如何使用xsl将chayTea映射。

输入xml:

代码语言:javascript
复制
<Hindi>Chay</Hindi>

输出xml:

代码语言:javascript
复制
<Hindi>Tea</Hindi>
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-12-15 10:56:07

使用xsl:when解决这一问题

代码语言:javascript
复制
<English>
    <xsl:choose>
        <xsl:when test="Hindi = 'Chay'">Tea</xsl:when>
        <xsl:when test="Hindi = 'Roti'">Bread</xsl:when>
    </xsl:choose>
<English>   
票数 2
EN

Stack Overflow用户

发布于 2018-12-07 09:04:45

我希望您只使用两种语言,否则我的代码将无法工作。我只是快速地对它进行了编码,所以它可能不是最时髦的代码。记住,条目必须有相同的顺序。因此,如果您想翻译一个单词,在位置x在枚举中,x必须是该词在其他枚举中的位置。

字典变量:

代码语言:javascript
复制
<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>

匹配模板:

代码语言:javascript
复制
<!-- 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>
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/53664812

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档