Я пытаюсь применить преобразование XSLT к пакетной документации XML. Главной точкой преобразования является переупорядочение нескольких элементов. Я хочу, чтобы сохранить какие-либо комментарии, которые непосредственно предшествует элемент:xslt & xpath: соответствие непосредственно предшествующим комментариям
<!-- 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()]
Спасибо, ваше решение отлично работает! Мне нужно сделать некоторые чтения на generate-id() и key(). –
@Joshua Johnson: Что касается ключей: я написал что-то, что объясняет, как они работают на примере JavaScript, посмотрите, хотите ли вы: http://stackoverflow.com/questions/948218/xslt-3-level- grouping-on-attributes/955527 # 955527 (просто прочитайте нижнюю часть ответа). – Tomalak