【发布时间】:2010-10-28 22:26:41
【问题描述】:
我正在尝试使用前兄弟从组中选择唯一元素。
以下面的xml为例..
<items>
<item>
<options>
<option>
<option-data>
<data-ab>TEST1</date-qualifier>
<date>20101026</date>
</option-data>
<option-data>
<data-ab>TEST2</date-qualifier>
<date>20101026</date>
</option-data>
</option>
<option type="2">
<option-data>
<data-ab>TEST1</date-qualifier>
<date>20101026</date>
</option-data>
</option>
</options>
</item>
<item>
<options>
<option>
<option-data>
<data-ab>TEST1</date-qualifier>
<date>20101026</date>
</option-data>
</option>
<option type="2">
<option-data>
<data-ab>TEST1</date-qualifier>
<date>20101026</date>
</option-data>
</option>
</options>
</item>
</items>
我希望能够选择唯一的 option-date 元素(不同的是 date 和 data-ab)。我只想为每个项目选择唯一的选项数据/日期,即不是按选项。我使用了前兄弟的组合,但是当它返回给父级时,我只能保证每个选项的日期都是唯一的我逐项需要。
为此绞尽脑汁好几个小时,却想不出一个优雅的解决方案。
问候, 安迪
【问题讨论】:
-
-
我认为您最好的选择是使用 Muenchian 分组...复合键,例如:
<xsl:key name="item-option-date" match="item/options/option/option-data" use="concat(generate-id(../../..), ':', date, ':', data-ab)" />这不是一个完整的答案,但我必须回家吃晚饭。 ;-) -
我想另一个有用的澄清问题是,您需要如何查询/访问这些独特元素:(a) 所有元素的节点集(对于所有项目)? (b) 给定
<item>,它独特的选项数据后代是什么? (c) 别的什么?当你说“选择唯一的选项数据元素”时,你的意思是你想省略 all 那些不是唯一的,还是你想选择每一个(即选择不同的) ? -
好问题,+1。请参阅我的答案以获得完整、高效和事实上的标准解决方案。 :)
-
您的问题不清楚。首先
I want to be able to select unique option-date elements (distinct is by date and data-ab):在您的示例中没有唯一的(它们都具有相同的键)。第二个问题I only want to select the option-data/date that is uniqueu for each item i.e not by option:这里也一样,都是同一个key。你想把它们分组吗?期望的输出是什么?
标签: xslt