Как создать таблицу стилей XSLT для следующего фрагмента TEI? - PullRequest
0 голосов
/ 27 октября 2018

Я хотел попросить вас о помощи.Я совершенно новичок в XSLT, и я хотел знать, может ли кто-нибудь показать мне правильную таблицу стилей XSLT для следующего фрагмента TEI:

<div>
    <head>Weitere Aufzählungen</head>
    <list rend="numbered">
        <item n="1">A</item>
        <item n="2">B</item>                           
        <item n="3">C<list rend="numbered">
            <item n="3.1">a</item>
            <item n="3.2">b</item>
            </list>
        </item>
    </list>
</div>

Вывод должен выглядеть так, как в HTML-документе:

1. A
2. B
3. C
    3.1 a
    3.2 b

Большое спасибо за помощь:)

1 Ответ

0 голосов
/ 27 октября 2018

Если вы хотите вывод текста, подойдет следующая таблица стилей с <xsl:output method="text" />.Он различает уровень отступа путем подсчета узлов-предков элемента и добавляет дополнительные . на уровне 0.

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
  <xsl:output method="text" indent="yes" />
  <xsl:variable name="newLine"  select="'&#xa;'" />

    <xsl:template match="text()" />

    <xsl:template match="/div/list">
        <xsl:apply-templates select="item" />
    </xsl:template>

    <xsl:template match="item">
        <xsl:for-each select="ancestor::item"><xsl:text>   </xsl:text></xsl:for-each>
        <xsl:value-of select="@n" />
        <xsl:if test="not(ancestor::item)"><xsl:text>.</xsl:text></xsl:if>
        <xsl:value-of select="concat(' ',text(),$newLine)" />
        <xsl:apply-templates select="list" />
    </xsl:template>   
</xsl:stylesheet>

Вывод:

1. A
2. B
3. C
   3.1 a
   3.2 b

Кстати, вам может потребоваться добавить соответствующее объявление пространства имен для пространства имен TEI к элементу xsl:stylesheet.

...