DITA XSLT - 将元标记编写为关键字

时间:2014-04-03 18:50:41

标签: xslt dita

我正在使用DITA-OT(h2d.xsl)中的XSLT将HTML meta关键字标签转换为其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示例的以下解决方案。由于关键字标签之前还有其他元标记,我必须先找到它们。这将找到第一个元标记,然后为每个正确匹配name参数的后续兄弟写入关键字。

<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>

1 个答案:

答案 0 :(得分:2)

您需要包含选择带apply-templates的元数据的<keywords>

<xsl:template match="html">
    <keywords>
        <xsl:apply-templates select="meta" mode="outofline"/>
    </keywords>

...
</xsl:template>

<xsl:template name="keyword-match" match="meta" mode="outofline"> 
    <keyword><xsl:value-of select="@content" /></keyword>
</xsl:template>

<强>替代:

<!-- match first meta -->
<xsl:template name="keyword-match" match="meta[1]" mode="outofline">
    <keywords> 
        <keyword><xsl:value-of select="@content" /></keyword>
        <xsl:apply-templates select="following-sibling::meta"/>
    </keywords>
</xsl:template>
<!-- match following meta -->
<xsl:template name="keyword-match" match="meta[position() &gt; 1]" mode="outofline"> 
    <keyword><xsl:value-of select="@content" /></keyword>
</xsl:template>