Ниже мой вклад.После преобразования я хочу, чтобы первое значение, отфильтрованное по условию, было напечатано в «первом» элементе, а оставшееся было напечатано в элементе «rest».
Входной XML:
<root>
<a>0</a>
<a>0</a>
<a>0</a>
<a>0</a>
<a>5</a>
<a>6</a>
<a>7</a>
<a>0</a>
<a>9</a>
<a>0</a>
<a>11</a>
<a>12</a>
<a>0</a>
<a>0</a>
<a>15</a>
<a>16</a>
</root>
В следующем XSLT, скажем, обязательно иметь условия for-each и if внутри.Поскольку положение захватывает на уровне для каждого, первый вход, отфильтрованный через условие if, не находится в положении 1, что приводит к нежелательному выводу.
XSLT:
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="/">
<root>
<xsl:for-each select="root/a">
**<xsl:if test=". != 0">**
<xsl:choose>
<xsl:when test="position()=1">
<first-value>
<xsl:value-of select="." />
</first-value>
</xsl:when>
<xsl:otherwise>
<rest>
<xsl:value-of select="." />
</rest>
</xsl:otherwise>
</xsl:choose>
</xsl:if>
</xsl:for-each>
</root>
</xsl:template>
</xsl:stylesheet>
Вывод из вышеупомянутого XSLT
<root>
**<rest>5</rest>**
<rest>6</rest>
<rest>7</rest>
<rest>9</rest>
<rest>11</rest>
<rest>12</rest>
<rest>15</rest>
<rest>16</rest>
</root>
Ожидаемый вывод:
<root>
**<first>5</first>**
<rest>6</rest>
<rest>7</rest>
<rest>9</rest>
<rest>11</rest>
<rest>12</rest>
<rest>15</rest>
<rest>16</rest>
</root>
Как напечатать первое отфильтрованное значение вэлемент, а остальные в отдельном элементе?Есть ли альтернативный подход к тому, что я выбрал?