2015-01-26 3 views
1

Я относительно новичок в XSLT и считаю, что предыдущий брат: довольно болезненный.Выбор идентификатора предшествующего брата родителя

Используя очень простой пример XML:

<month> 
    <day id="1">Day one was a lovely day</day> 
    <day id="2">Day two was balls</day> 
    <day id="3">Day three was Wednesday</day> 
</month> 

и некоторые основные XSLT (я хотел бы каждый день выхода в новый файл: нет проблем с этим):

<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="2.0"> 
    <xsl:template match="/month"> 
     <xsl:for-each select="day"> 
      <xsl:result-document href="output/day-{@id}/index.html"> 
       <xsl:call-template name="page" /> 
      </xsl:result-document> 
     </xsl:for-each> 
    </xsl:template> 


    <xsl:template name="page"> 
     <html> 
      <head> 
       <title>This is <xsl:value-of select="id" /></title> 
      </head> 
      <body> 
       <h1>Day of new <xsl:value-of select="@id" /></h1> 
       <p><xsl:value-of select="." /></p> 

       <!--PROBLEM HERE:: --> 
       Previous: <xsl:value-of select="" /> 

      </body> 
     </html> 
    </xsl:template>  
</xsl:stylesheet> 

Проблема У меня есть последний бит (где я написал ПРОБЛЕМУ ЗДЕСЬ). Я пытаюсь получить идентификатор предыдущего дня. Кажется, я не могу получить правильное значение select. Я пробовал все комбинации ancestor:: и ../preceding-sibling::day[1] Я могу найти упомянутое где угодно. Пожалуйста помоги!

+0

Я не проверял, есть ли предыдущий узел в этом коде, но предположил, что он будет работать как минимум на День 2 и День 3. – user2672537

+0

Вам не нужно совпадать с месяцем, так как все, что вы делаете, это обработка его детей, и встроенные в шаблон правила XSLT сделают это автоматически. Удалите для каждого в день и совпадение шаблона в день вместо . Кроме того, если бы я был вами, я бы поднял вызываемый шаблон в шаблон дня, чтобы было ясно, что именно этот код выполняется, и вам не нужно определять, откуда он вызывается. Это может быть легко сейчас, но это не будет, если у вас есть большая таблица стилей. –

ответ

1

Используйте следующее:

<xsl:value-of select="preceding-sibling::day[1]/@id"/> 

Только что первый не будет иметь никакого значения, как нет предыдущего-собрата day.

+0

Спасибо ... по какой-то причине я работал над предположением, что этот был внутри контекста дня ... вместо того, чтобы работать на этом самом узле. – user2672537

+1

@ user2672537 Пожалуйста, не забудьте [** принять этот ответ **] (http://stackoverflow.com/help/someone-answers), если он решил вашу проблему. Благодаря! –

Смежные вопросы