【问题标题】:Need to convert XML for unique code in XSLT 1.0需要将 XML 转换为 XSLT 1.0 中的唯一代码
【发布时间】:2017-12-30 20:23:14
【问题描述】:

我正在从其中一个系统获取以下格式的 XML。我需要转换 XML。

<parentTag>
    <childTag>
        <date>28-Jan-2017</date>
        <code>DoB</code>
        <oldStatus>g</oldStatus>
        <newStatus>22</newStatus>
    </childTag>

    <childTag>
        <date>27-Jan-2017</date>
        <code>www</code>
        <oldStatus>25</oldStatus>
        <newStatus>g</newStatus>
    </childTag>

    <childTag>
        <date>26-Jan-2017</date>
        <code>DoB</code>
        <oldStatus>56</oldStatus>
        <newStatus>73</newStatus>
    </childTag>

    <childTag>
        <date>26-Jan-2017</date>
        <code>www</code>
        <oldStatus>66</oldStatus>
        <newStatus>55</newStatus>
    </childTag>
</parentTag>

我需要收集每个代码的所有详细信息,并使用 XSLT 1.0 将 XML 转换如下。

<parentTag>
    <childTag>
        <code>DoB</code>
        <status>
            <date>28-Jan-2017</date>
            <oldStatus>g</oldStatus>
            <newStatus>22</newStatus>
        </status>
        <status>
            <date>26-Jan-2017</date>
            <oldStatus>56</oldStatus>
            <newStatus>73</newStatus>
        </status>
    </childTag>

    <childTag>
        <code>www</code>
        <status>
            <date>27-Jan-2017</date>
            <oldStatus>25</oldStatus>
            <newStatus>g</newStatus>
        </status>
        <status>
            <date>26-Jan-2017</date>
            <oldStatus>66</oldStatus>
            <newStatus>55</newStatus>
        </status>
    </childTag>
</parentTag>

我请你帮忙。

谢谢。

【问题讨论】:

标签: xml xslt xslt-1.0 transformation


【解决方案1】:

您可以在 xslt 1.0 中使用 muenchian 分组

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
    xmlns:xs="http://www.w3.org/2001/XMLSchema"
    exclude-result-prefixes="xs"
    version="1.0">


    <xsl:key name="keycode" match="childTag" use="code"/>

    <xsl:template match="parentTag">
        <xsl:copy>
        <xsl:for-each select="childTag[generate-id() = generate-id(key('keycode', code)[1])]">
        <childTag>
            <xsl:copy-of select="code"/>
            <xsl:variable name="currentcode" select="normalize-space(code)"/>
            <xsl:for-each select="key('keycode', $currentcode)">
                <status>
                    <xsl:copy-of select="date|oldStatus|newStatus"/>
                </status>
            </xsl:for-each>
        </childTag>
        </xsl:for-each>            
        </xsl:copy>
    </xsl:template>

    <xsl:template match="@*|node()">
        <xsl:copy>
            <xsl:apply-templates select="@*|node()"/>
        </xsl:copy>
    </xsl:template>
</xsl:stylesheet>

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-12-22
    • 2011-09-24
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多