Я пытаюсь применить XSLT-преобразование к пакету XML-документов. Основная задача преобразования - переупорядочить несколько элементов. Я хочу сохранить любые комментарии, которые непосредственно предшествуют элементу:
<!-- not this comment -->
<element />
<!-- this comment -->
<!-- and this one -->
<element />
Самое близкое решение, которое я нашел, - использовать выражение:
<xsl:template match="element">
<xsl:copy-of select="preceding-sibling::comment()"/>
</xsl:template>
, который захватывает слишком много комментариев:
<!-- not this comment -->
<!-- this comment -->
<!-- and this one -->
Я понимаю, почему вышеупомянутый XPath не работает правильно, но у меня нет хороших идей о том, как действовать. То, что я ищу, - это что-то, чтобы выбрать все предыдущие комментарии, чей следующий родственник является либо другим комментарием, либо текущим обрабатываемым элементом:
preceding-sibling::comment()[following-sibling::reference_to_current_element() or following-sibling::comment()]