Существует "чит" способ сделать это, используя подстроку.Чтобы изменить шаблон, который у вас уже есть:
<xsl:template match="item">
<xsl:variable name="indent" select="substring(' ',1,count(ancestor::*)*2)" />
<xsl:text> </xsl:text>
<xsl:value-of select="$indent" />
<xsl:text>open</xsl:text>
<xsl:apply-templates/>
<xsl:text> </xsl:text>
<xsl:value-of select="$indent" />
<xsl:text>close</xsl:text>
</xsl:template>
Как видите, он просто вставляет количество пробелов в зависимости от того, сколько предков у элемента (умножено на 2), беря часть строкипространств.Я использовал 10 здесь, что означает, что он перестанет отступать на 5 уровнях, но вы можете использовать просто использовать более длинную строку, если ваш XML глубже этого.
Это также имеет то преимущество, что вы можете сделатьПользовательский отступ довольно легко, используя другую строку.Например, вы можете использовать 1-2-3-4-5-6-7-8-9-
, если хотите четко показать отступ в каждой строке.
Я также заменил возврат каретки на
, чтобы сделать код проще для отступа для удобства чтения.