У меня есть следующий XML:
<system-folder>
<system-folder>
<system-page>
<display-name>One</display-name>
</system-page>
</system-folder>
<system-folder>
<system-page>
<display-name>Two</display-name>
</system-page>
</system-folder>
<system-folder current="true">
<system-page>
<display-name>Three</display-name>
</system-page>
<system-page>
<display-name>Four</display-name>
</system-page>
<system-page>
<display-name>Five</display-name>
</system-page>
</system-folder>
</system-folder>
И следующий код работает как положено:
<?xml version="1.0"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
<xsl:template match="/">
<xsl:for-each select="//system-folder[@current="true"]/..//system-page">
Current: <xsl:value-of select="display-name"/><br/>
</xsl:for-each>
</xsl:template>
</xsl:stylesheet>
И возвращает то, что я ожидал:
Current: One
Current: Two
Current: Three
Current: Four
Current: Five
Но когда я пытаюсь получить предыдущие предметы, используя:
<?xml version="1.0"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
<xsl:template match="/">
<xsl:for-each select="//system-folder[@current="true"]/..//system-page">
Previous: <xsl:value-of select="preceding-sibling::*[1]/display-name"/><br/>
Current: <xsl:value-of select="display-name"/><br/><br/>
</xsl:for-each>
</xsl:template>
</xsl:stylesheet>
Я получаю:
Previous:
Current: One
Previous: <-- Why is this missing?
Current: Two
Previous: <-- Why is this missing?
Current: Three
Previous: Three
Current: Four
Previous: Four
Current: Five
Почему два пункта выше отсутствуют? Мне кажется, что предыдущий брат не выходит из папки. Как я могу решить это?
Огромное спасибо тому, кто может мне помочь - я застрял на нем слишком долго: (