dita-ot:是否可以创建一个可以转换为一组现有元素的新元素?

时间:2017-05-22 07:44:18

标签: xml xslt dita

我正在使用dita-ot 2.4。我需要在我的文档中添加一个新元素。它应该通过XSL转换转换为一组不同的元素。我创建了一个插件,用于定义新元素及其属性,并将其添加到现有主题模板中。我还在输出处理插件中添加了一些基本的XSL处理:

<xsl:attribute-set name="rootelement">
    <xsl:attribute name="font-weight">bold</xsl:attribute>
</xsl:attribute-set>

<xsl:template match="rootelement">
    <fo:inline xsl:use-attribute-sets="rootelement">
        <xsl:call-template name="commonattributes"/>
        <xsl:apply-templates/>
    </fo:inline>
</xsl:template>

所以,现在我可以在我的文档中写下以下内容,它将以粗体显示(PDF格式):

<rootelement>
    test
</rootelement>

然而,我最初的目标是为<rootelement>创建一个可以发出其他元素的转换,例如,像这样:

<xsl:template match="rootelement">
    <b>Some text:</b>
    <xsl:value-of select="current()" />
    <i>Some other text</i>
</xsl:template>

实际转换有点复杂并涉及表格,所以我不能只将显示属性应用于此元素。

是否可以在DITA中实现此类行为?我需要专业化吗?

编辑:澄清一下,这是一段似乎有用的样式表:

<xsl:template match="rootelement">
    <xsl:text>
        Text:
    </xsl:text>
    <fo:inline xsl:use-attribute-sets="rootelement">
        <xsl:call-template name="commonattributes"/>
        <xsl:apply-templates/>
    </fo:inline>
</xsl:template>

rootelement的每个实例都附加&#34;文字:&#34;。

另一方面,此样式表不会产生预期结果:

<xsl:template match="rootelement">
    <i>
        <xsl:text>
            Text:
        </xsl:text>
    </i>
    <fo:inline xsl:use-attribute-sets="rootelement">
        <xsl:call-template name="commonattributes"/>
        <xsl:apply-templates/>
    </fo:inline>
</xsl:template>

&#34;文字:&#34;部分而不是用斜体印刷只是消失了。此外,只需在源XML中放置<rootelement><i>Text: </i> some text</rootelement>就可以正常工作。

1 个答案:

答案 0 :(得分:0)

您需要使用专业化来实施。您应该能够使用模板匹配来创建一个及其子项,以将所需内容放在输出流中。您的样本具有XSLT方面所需的基础知识;你只需要通过表结构来定义你需要的东西。