Эта таблица стилей:
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:m="map">
<xsl:output method="text"/>
<xsl:strip-space elements="*"/>
<xsl:variable name="vPadding"
select="' 
 '"/>
<m:m n="index" p="1"/>
<m:m n="version" p="3"/>
<m:m n="user" p="15"/>
<m:m n="date_modified" p="8"/>
<m:m n="object_name" p="23"/>
<m:m n="permission" p="34"/>
<xsl:template match="Record">
<xsl:apply-templates select="*[1]"/>
</xsl:template>
<xsl:template match="FieldValue">
<xsl:param name="pOutput" select="$vPadding"/>
<xsl:variable name="vValue">
<xsl:apply-templates select="@fieldValue"/>
</xsl:variable>
<xsl:variable name="vPos"
select="document('')/*/m:m
[@n=current()/@fieldName]/@p"/>
<xsl:variable name="vOutput"
select="concat(substring($pOutput,1,$vPos -1),
$vValue,
substring($pOutput,$vPos+string-length($vValue)))"/>
<xsl:variable name="vNext" select="following-sibling::*[1]"/>
<xsl:apply-templates select="$vNext">
<xsl:with-param name="pOutput" select="$vOutput"/>
</xsl:apply-templates>
<xsl:if test="not($vNext)">
<xsl:value-of select="concat($vOutput,'
')"/>
</xsl:if>
</xsl:template>
<xsl:template match="@*[../@fieldName='date_modified']">
<xsl:value-of select="concat(substring(translate(.,'-',''),5,4),
substring(.,3,2))"/>
</xsl:template>
</xsl:stylesheet>
Выход:
1 100 101810
tester Menu Permission X
2 100 121510
user1 Control Permission E
3 15 100210
user2 Run Permission R
Примечание : Мелкозернистый обход, дополнительная маска, встроенная карта со значением начальной позиции.
РЕДАКТИРОВАТЬ : на всякий случай убрать пробел ...