Переменная в XSLT не сохраняет порядок элементов

Я пытаюсь выполнить xsl шаблон с помощью libxslt, но получаю совсем неинтуитивный вывод. У меня есть такая XML:

<ancestor0>
  <ancestor1>
    <ancestor2>
      <node1></node1>
    </ancestor2>
  </ancestor1>
</ancestor0>

Такая XSL:

<?xml version="1.0"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">

<xsl:template match="node1">
    <xsl:variable name="save" select="./ancestor::*"/>
    <xsl:value-of select="name($save[1])"/>
</xsl:template>

</xsl:stylesheet>

При выполнении я расчитываю увидеть ancestor2, но выводится ancestor0. Что интересно, если этот же шаблон выполнить с помощью MSXML, то выведется ancestor2. Есть ли возможность сохранять в переменной элементы в обратном порядке?


Ответы (1 шт):

Автор решения: Yitzhak Khabinsky

Попробуйте следующее XPath выражение:

./parent::*
→ Ссылка