【问题标题】:XSL mapping, making a hashmapXSL映射,制作hashmap
【发布时间】:2015-02-07 05:19:59
【问题描述】:

我需要一些帮助来制作 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>

现在我想把它转换成一个看起来像地图的结构:我们的“关键”将是 元素(来自每个 resultItem),值将是 来自具有相同 值的每个 的元素。

所以输出应该看起来像(您可以在正确的 resultItem 的 中看到“cc1”+“cc2”和“cc4”+“cc5”值,因为在输入中 对应的中的元素相同):

<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)。

我试图用 for-each 结构来考虑它,但在我看来这是一团糟。

提前致谢, 汤姆

【问题讨论】:

  • 这是一个分组问题。进行搜索 - 这是这里最常被问到的问题之一。请注意,XSLT 1.0 或 2.0 的答案是不同的。
  • 要扩展它,如果您使用 XSLT 1.0,请搜索“Muenchian grouping”,如果使用 2.0,请搜索 xsl:for-each-group。 2.0 解决方案会容易得多。在尝试将其扩展为复合键之前,您可能会尝试使用简单键(仅一个元素)。
  • 谢谢你们俩。关键字“分组”对我来说是关键。使用它我也发现了 muenchian 分组(以及很多例子)。 michael.hor257 请回答这个问题,我会给你要点 :) Michael Kay:我需要复合键,因为在我的真实模式中,元素“a”和“b”是“邮政编码”和“城镇”,并且我需要两者来识别,但谢谢你的观点!
  • 邮政编码本身不是唯一的吗?
  • @michael.hor257k 不一定。我在一个与其他两个城镇共享邮政编码的城镇长大。

标签: xml xslt map mapping


【解决方案1】:

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

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

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

【讨论】:

    猜你喜欢
    • 2013-04-25
    • 1970-01-01
    • 1970-01-01
    • 2014-06-14
    • 2011-10-12
    • 2011-04-18
    • 2011-07-13
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多