TEI-P5:如何将 css 类名添加到 html table 标签?
TEI-P5: how to add a css classname to html table tag?
我想通过 CSS.
在转换后的 HTML 中为 table 中的特定 class 设置不同的样式
例如 XML:
<table>
<row role="label">
<cell>
Manuscrit Bodmer
</cell>
<cell>
Manuscrit fr. 1457
</cell>
</row>
<row>
<cell>
<lb/>Début <supplied><locus from="1r">fol. 1</locus></supplied> :
</cell>
<cell>
<note><lb/><supplied>fol. 6vᵒ, ligne 15</supplied> :</note>
</cell>
</row>
</table>
在 XSL 中:
<xsl:template match="tei:table[not(. = '')]">
<xsl:param name="sprache"/>
<xsl:element name="table">
<xsl:apply-templates><xsl:with-param name="sprache" select="$sprache"/></xsl:apply-templates>
</xsl:element>
</xsl:template>
为了实现这一点,我正在考虑将特定的 CSS class 应用到那个 table 例如。在生成 HTML
<table class="comparison-table">
并在 css 中设置样式。
这可能吗?我怎样才能准确地做到这一点?
---更新
感谢@zx485,我将 XML & XSL 更新为:
<xsl:template match="tei:table[@rend='comparison-table']">
<xsl:param name="sprache"/>
<xsl:copy>
<xsl:attribute name="class"><xsl:text>comparison-table</xsl:text></xsl:attribute>
<xsl:apply-templates><xsl:with-param name="sprache" select="$sprache"/></xsl:apply-templates>
</xsl:copy>
</xsl:template>
<xsl:template match="tei:table[not(. = '')]">
<xsl:param name="sprache"/>
<xsl:element name="table">
<xsl:apply-templates><xsl:with-param name="sprache" select="$sprache"/></xsl:apply-templates>
</xsl:element>
</xsl:template>
在我的 XML 中:
<table rend="comparison-table">
<row role="label">
<cell>
Manuscrit Bodmer
</cell>
<cell>
Manuscrit fr. 1457
</cell>
</row>
....
但是在生成的 HTML 文件中 table 没有 css class 名称 "comparison-table"。
=== 更新 2:正如@zx485 在讨论室中建议的那样,我只需要更改为
<xsl:template match="tei:table">
将模板更改为
<xsl:template match="tei:table[not(. = '')]">
<xsl:param name="sprache"/>
<xsl:copy>
<xsl:attribute name="class"><xsl:text>comparison-table</xsl:text></xsl:attribute>
<xsl:apply-templates><xsl:with-param name="sprache" select="$sprache"/></xsl:apply-templates>
</xsl:copy>
</xsl:template>
我用 xsl:if 重构了 zx485 的解决方案,它可能更具可读性并且遵循 DRY 原则:
<xsl:template match="tei:table">
<xsl:param name="sprache"/>
<xsl:element name="table">
<xsl:if test="@rend='comparison-table'">
<xsl:attribute
name="class"><xsl:text>comparison-table</xsl:text></xsl:attribute>
</xsl:if>
<xsl:apply-templates><xsl:with-param name="sprache"
select="$sprache"/></xsl:apply-templates>
</xsl:element>
</xsl:template>
我想通过 CSS.
在转换后的 HTML 中为 table 中的特定 class 设置不同的样式例如 XML:
<table>
<row role="label">
<cell>
Manuscrit Bodmer
</cell>
<cell>
Manuscrit fr. 1457
</cell>
</row>
<row>
<cell>
<lb/>Début <supplied><locus from="1r">fol. 1</locus></supplied> :
</cell>
<cell>
<note><lb/><supplied>fol. 6vᵒ, ligne 15</supplied> :</note>
</cell>
</row>
</table>
在 XSL 中:
<xsl:template match="tei:table[not(. = '')]">
<xsl:param name="sprache"/>
<xsl:element name="table">
<xsl:apply-templates><xsl:with-param name="sprache" select="$sprache"/></xsl:apply-templates>
</xsl:element>
</xsl:template>
为了实现这一点,我正在考虑将特定的 CSS class 应用到那个 table 例如。在生成 HTML
<table class="comparison-table">
并在 css 中设置样式。 这可能吗?我怎样才能准确地做到这一点?
---更新 感谢@zx485,我将 XML & XSL 更新为:
<xsl:template match="tei:table[@rend='comparison-table']">
<xsl:param name="sprache"/>
<xsl:copy>
<xsl:attribute name="class"><xsl:text>comparison-table</xsl:text></xsl:attribute>
<xsl:apply-templates><xsl:with-param name="sprache" select="$sprache"/></xsl:apply-templates>
</xsl:copy>
</xsl:template>
<xsl:template match="tei:table[not(. = '')]">
<xsl:param name="sprache"/>
<xsl:element name="table">
<xsl:apply-templates><xsl:with-param name="sprache" select="$sprache"/></xsl:apply-templates>
</xsl:element>
</xsl:template>
在我的 XML 中:
<table rend="comparison-table">
<row role="label">
<cell>
Manuscrit Bodmer
</cell>
<cell>
Manuscrit fr. 1457
</cell>
</row>
....
但是在生成的 HTML 文件中 table 没有 css class 名称 "comparison-table"。
=== 更新 2:正如@zx485 在讨论室中建议的那样,我只需要更改为
<xsl:template match="tei:table">
将模板更改为
<xsl:template match="tei:table[not(. = '')]">
<xsl:param name="sprache"/>
<xsl:copy>
<xsl:attribute name="class"><xsl:text>comparison-table</xsl:text></xsl:attribute>
<xsl:apply-templates><xsl:with-param name="sprache" select="$sprache"/></xsl:apply-templates>
</xsl:copy>
</xsl:template>
我用 xsl:if 重构了 zx485 的解决方案,它可能更具可读性并且遵循 DRY 原则:
<xsl:template match="tei:table">
<xsl:param name="sprache"/>
<xsl:element name="table">
<xsl:if test="@rend='comparison-table'">
<xsl:attribute
name="class"><xsl:text>comparison-table</xsl:text></xsl:attribute>
</xsl:if>
<xsl:apply-templates><xsl:with-param name="sprache"
select="$sprache"/></xsl:apply-templates>
</xsl:element>
</xsl:template>