Я относительно новичок в 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]
Я могу найти упомянутое где угодно. Пожалуйста помоги!
Я не проверял, есть ли предыдущий узел в этом коде, но предположил, что он будет работать как минимум на День 2 и День 3. – user2672537
Вам не нужно совпадать с месяцем, так как все, что вы делаете, это обработка его детей, и встроенные в шаблон правила XSLT сделают это автоматически. Удалите для каждого в день и совпадение шаблона в день вместо. Кроме того, если бы я был вами, я бы поднял вызываемый шаблон в шаблон дня, чтобы было ясно, что именно этот код выполняется, и вам не нужно определять, откуда он вызывается. Это может быть легко сейчас, но это не будет, если у вас есть большая таблица стилей. –