Преобразуйте HTML DL в таблицу терминов и определений с двумя столбцами XSL-FO

Как я могу использовать XSLT, чтобы превратить список определений HTML (DL) в таблицу из двух столбцов XSL-FO с терминами в первом столбце и определениями во втором, с несколькими возможными определениями?

(Извинения, если это уже где-то ответили. Я искал, но не нашел.)

1 ответ

Решение

Суть этого вопроса состоит в том, чтобы найти следующих братьев и сестер, которые все еще имеют текущий DT в качестве своего термина: XSLT: Выбирайте следующих братьев и сестер, пока не достигнете указанного тега.

Тогда нужно просто определить всю таблицу как шаблон верхнего уровня DL:

<xsl:template match="dl">
    <fo:table>
        <fo:table-body>
            <xsl:for-each select="dt">
                <xsl:variable name="current-term" select="."/>
                <fo:table-row>
                    <fo:table-cell font-weight="bold" width="5.5cm">
                        <fo:block>
                            <xsl:apply-templates />
                        </fo:block>
                    </fo:table-cell>
                    <fo:table-cell>
                        <fo:block>
                            <xsl:apply-templates select="following-sibling::dd[preceding-sibling::dt[1] = $current-term]" />
                        </fo:block>
                    </fo:table-cell>
                </fo:table-row>
            </xsl:for-each>
        </fo:table-body>
    </fo:table>
</xsl:template>
<xsl:template match="dd">
    <fo:block>
        <xsl:apply-templates />
    </fo:block>
</xsl:template>
Другие вопросы по тегам