Вам не хватает того факта, что <xsl:apply-templates>
уже работает как цикл.Вам не нужно <xsl:for-each>
вообще.
Напишите свой <xsl:template match="row">
, чтобы он выдал правильный вывод для один <row>
.Шаблон будет выполняться несколько раз автоматически.
Однако я рекомендую более конкретный вызов <xsl:apply-templates>
.Вы хотите выбрать только <row>
элементов, поэтому логично было бы использовать select="row"
.
<xsl:stylesheet
version="2.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:xs="http://www.w3.org/2001/XMLSchema"
exclude-result-prefixes="xs"
>
<xsl:template match="csv_data">
<TEI xmlns="http://www.tei-c.org/ns/1.0">
<someHeader>
<text>
<body>
<div type="sometype">
<xsl:apply-templates select="row" />
</div>
</body>
</text>
</TEI>
</xsl:template>
<xsl:template match="row">
<post attribute1="{stuff1}" attribute2="{stuff2}"
attribute3="{stuff3}" attribute4="{stuff4}" />
</xsl:template>
</xsl:stylesheet>
Еще одна вещь, на которую следует обратить внимание: вам не нужно (и не следует) писать абсолютныеXPaths в <xsl:template match="...">
выражениях.Только часть выражения должна соответствовать, поэтому использование match="//row"
не нужно, а match="row"
совершенно нормально.