Мне нужно выбрать только уникальные записи из XML-документа в контексте цикла <xsl:for-each>. Visual Studio ограничивает меня использованием XSL 1.0.
<availList>
<item>
<schDate>2010-06-24</schDate>
<schFrmTime>10:00:00</schFrmTime>
<schToTime>13:00:00</schToTime>
<variousOtherElements></variousOtherElements>
</item>
<item>
<schDate>2010-06-24</schDate>
<schFrmTime>10:00:00</schFrmTime>
<schToTime>13:00:00</schToTime>
<variousOtherElements></variousOtherElements>
</item>
<item>
<schDate>2010-06-25</schDate>
<schFrmTime>10:00:00</schFrmTime>
<schToTime>12:00:00</schToTime>
<variousOtherElements></variousOtherElements>
</item>
<item>
<schDate>2010-06-26</schDate>
<schFrmTime>13:00:00</schFrmTime>
<schToTime>14:00:00</schToTime>
<variousOtherElements></variousOtherElements>
</item>
<item>
<schDate>2010-06-26</schDate>
<schFrmTime>10:00:00</schFrmTime>
<schToTime>12:00:00</schToTime>
<variousOtherElements></variousOtherElements>
</item>
</availList>
Уникальность должна основываться на значении трех дочерних элементов: schDate, schFrmTime и schToTime. Если два элемента item имеют одинаковые значения для всех трех дочерних элементов, они дублируются. В приведенном выше XML элементы один и два повторяются. Остальные уникальны. Как указано выше, каждый элемент содержит другие элементы, которые мы не хотим включать в сравнение. «Уникальность» должна быть фактором этих трех элементов, и только их.
Я попытался сделать это с помощью следующего:
availList/item[not(schDate = preceding:: schDate and schFrmTime = preceding:: schFrmTime and schToTime = preceding:: schToTime)]
Идея заключается в том, чтобы выбрать записи, в которых нет предшествующих элементов с одинаковыми schDate, schFrmTime и schToTime. Однако в его выводе отсутствует последний элемент. Это связано с тем, что мой XPath фактически исключает элементы, в которых все значения дочерних элементов совпадают во всем предыдущем документе. Ни один item не соответствует всем дочерним элементам последнего элемента, но поскольку значение каждого элемента индивидуально присутствует в другом элементе, последний элемент исключается.
Я мог бы получить правильный результат, сравнив все дочерние значения в виде объединенной строки с теми же составными значениями для каждого предыдущего элемента. Кто-нибудь знает, как я мог бы это сделать?