【发布时间】:2019-01-07 00:29:00
【问题描述】:
我有以下 XML:
<cars>
<car type='toyota'>
<model>Yaris</model>
<year>1998</year>
<company>TOYOTA</company>
</car>
<car type='kia'>
<model>Optima</model>
<year>2002</year>
<company>KIA</company>
</car>
<car type='kia'>
<model>CERATO</model>
<year>2009</year>
<company>KIA</company>
</car>
<car type='bmw'>
<model>M3</model>
<year>2016</year>
<company>BMW</company>
</car>
<car type='bmw'>
<model>X5</model>
<year>2010</year>
</car>
<car type='bmw'>
<model>335i</model>
<year>2010</year>
<company>BMW</company>
</car>
</cars>
我想按公司元素对汽车进行分组,并在同一元素上进行排序(alpha,升序)。输出应该是这样的:
BMW: M3, X5, 335i
KIA: Optima, CERATO
TOYOTA: Yaris
问题是 car 元素可能不包含公司节点,在这种情况下,必须使用 car/@type 值将元素添加到正确的组中。如何将@type 属性的值映射到基于公司值的正确组?
【问题讨论】:
-
向我们展示您现有的分组和排序代码,以便我们修复它,例如使用
group-by="(company, upper-case(@type))[1]"并不难。 -
并标记或建议您在尝试的代码中使用哪个 XSLT 版本。
-
在您的示例中,
COMPANY元素是多余的,因为它在出现时总是等于upper-case(@type),所以为什么不忽略它并在@type上分组? -
我在示例中遗漏了一个重要部分。公司的价值并不总是与类型的价值相同。此外,type 的值可能不存在于 company 元素之一中,在这种情况下,应该使用 type 的值和相关元素呈现一个新组。
-
我正在使用 XSLT v2。 0
标签: xml xslt xslt-grouping