XSL映射,制作一个hashmap

时间:2014-12-09 10:37:57

标签: xml xslt map mapping

我需要帮助制作一个xsl地图文件。 我有一个输入。这包含一些项目的列表:

<root>
    <resultListIn>
        <resultItemIn>
            <a>aaa</a>
            <b>bbb</b>
            <c>ccc1</c>
        </resultItemIn>
        <resultItemIn>
            <a>aaa</a>
            <b>bbb</b>
            <c>ccc2</c>
        </resultItemIn>
        <resultItemIn>
            <a>aab</a>
            <b>bbb</b>
            <c>ccc3</c>
        </resultItemIn>
        <resultItemIn>
            <a>aaa</a>
            <b>bbc</b>
            <c>ccc4</c>
        </resultItemIn>
        <resultItemIn>
            <a>aaa</a>
            <b>bbc</b>
            <c>ccc5</c>
        </resultItemIn>
    </resultListIn>
</root>

现在我想把它变成一个看起来像地图的结构:我们的“关键”将是&lt;一个&GT;和&lt; B个元素(来自每个resultItem),该值将是&lt; c取代;来自每个&lt; resultItem&GT;具有相同的&lt;一个&GT;和&lt; B个值。

所以输出应该是这样的(你可以看到&#34; cc1&#34; +&#34; cc2&#34;和&#34; cc4&#34; +&#34; cc5&#34;值在正确的resultItem&lt; cItemList&gt;中,因为在输入中&lt; a&gt;和&lt; b&gt;元素在相应的&lt; resultItem&gt;中是相同的:

<resultroot>
    <resultListOut>
        <resultItem>
            <a>aaa</a>
            <b>bbb</b>
            <cItemList>
                <c>cc1</c>
                <c>cc2</c>
            </cItemList>
        </resultItem>
        <resultItem>
            <a>aab</a>
            <b>bbb</b>
            <cItemList>
                <c>cc3</c>
            </cItemList>
        </resultItem>
        <resultItem>
            <a>aaa</a>
            <b>bbc</b>
            <cItemList>
                <c>cc4</c>
                <c>cc5</c>
            </cItemList>
        </resultItem>
    </resultListOut>
</resultroot>

你们能帮助我吗?我不需要一个完整的xsl代码,只需要一些指导,建议如何从哪里开始,我应该写什么样的算法。我真的没有看到如何在xsl中实现它(遗憾的是我不能使用Java)。

我尝试用每个结构来考虑它,但是我看到它是一个很大的混乱。

提前致谢, 汤姆

1 个答案:

答案 0 :(得分:0)

正如您所发现的,Muenchian grouping是您使用XSLT 1.0的答案。

要匹配两个元素,只需连接两个值(使用分隔符以防止误报),例如:

<xsl:key name="k" match="resultItem" use="concat(a,'|', b)"/>