我正在使用 DITA-OT (h2d.xsl) 中的 XSLT 将 HTML 元关键字标签转换为它们的 DITA 等效项,例如在 HTML 中:
<meta name="MS-HAID" content="cake" />
<meta name="MS-HAID" content="pie" />
<meta name="MS-HAID" content="tart" />
<meta name="search-keywords" content="creme brulee" />
我希望它显示为 DITA 关键字,即
<keywords>
<keyword>cake</keyword>
<keyword>pie</keyword>
<keyword>tart</keyword>
<keyword>creme brulee</keyword>
</keywords>
我可以写出每个关键字,但每个实例也包含关键字元素。我需要帮助理解选择什么,所以关键字只写一次。这是我当前的 XSLT:
<xsl:template name="keyword-match" match="meta" mode="outofline">
<keywords>
<keyword><xsl:value-of select="@content" /></keyword>
</keywords>
</xsl:template>
非常感谢。我已经尝试了十亿种不同的方法,但我就是无法理解它。
- - -更新 - - -
我根据@tobias-klevenz 示例提出了以下解决方案。由于关键字标签之前还有其他元标签,我必须先找到它们。这将定位第一个元标记,然后为每个正确匹配名称参数的后续兄弟编写关键字。
<xsl:template match="/html/head[1]/meta[1]" mode="outofline">
<keywords>
<xsl:for-each select="following-sibling::node()[@name='MS-HAID' or @name='search-keywords' or @name='keywords']">
<keyword><xsl:apply-templates select="@content" /></keyword>
</xsl:for-each>
</keywords>