Выбор последнего элемента во всем документе с помощью XSLT

Я хочу выбрать последний узел, соответствующий определенному шаблону в любом месте документа.

Я пытался что-то вроде

<xsl:stylesheet version="2.0"
 xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
  <xsl:template match="/">
    <xsl:copy-of select="//node_name[last()]"/>
  </xsl:template>
</xsl:stylesheet>

Однако при запуске этого с Saxon 9.4 в следующем документе: -

<a>
  <node_name attr="1"/>
  <b>
    <c>
    </c>
    <node_name attr="2"/>
  </b>
</a>

Я получаю этот вывод, где лежит оператор копирования: -

<node_name attr="1"/><node_name attr="2"/>

В то время как я действительно хочу получить результат: -

<node_name attr="2"/>

Что я здесь упускаю?

Кроме того, природа моего документа такова, что я заранее не знаю, каким будет точный путь к этому узлу (поскольку он состоит из кучи рекурсивных элементов).


person owagh    schedule 28.03.2013    source источник


Ответы (1)


Вы не ищете последний node_name, вы ищете последний из всех node_names. Следовательно, должно работать следующее выражение XPath:

(//node_name)[last()]
person choroba    schedule 28.03.2013