Docbook <bibliosource>在转换中迷失了</bibliosource>

时间:2013-08-16 09:39:42

标签: xslt docbook

我有以下结构

    <informalfigure xmlns="http://docbook.org/ns/docbook">
      <info>
        <bibliosource>Photo: John Doe</bibliosource>
      </info>
      <mediaobject>
        <imageobject>
          <imagedata contentdepth="30mm" contentwidth="35mm" fileref="path/to/img.jpg"/>
        </imageobject>
      </mediaobject>
      <caption>
        <para>Here goes the caption for the image</para>
      </caption>
    </informalfigure>

<imagedata><caption>已呈现,但转化后<bibliosource>已消失。

我正在使用docbook-xsl-1.77.0/xhtml/docbook.xsl进行转换...我需要一些关于在何处/如何更改xslt的指导,以便<bibliosource>正确转换。

谢谢!

1 个答案:

答案 0 :(得分:1)

这是一个简单的解决方案。将以下内容添加到XHTML自定义层:

<xsl:template match="d:caption">
  <div>
    <xsl:apply-templates select="." mode="common.html.attributes"/>
    <xsl:call-template name="id.attribute"/>
    <xsl:if test="@align = 'right' or @align = 'left' or @align='center'">
      <xsl:attribute name="align"><xsl:value-of select="@align"/></xsl:attribute>
    </xsl:if>
    <xsl:apply-templates/>
   </div>
   <div><xsl:value-of select="../d:info/d:bibliosource"/></div>   <!-- This line added -->
</xsl:template>

以上内容适用于namespace-aware XSLT样式表( docbook-xsl-ns )。

如果您使用非命名空间感知的样式表( docbook-xsl ),相应的自定义将变为:

<xsl:template match="caption">
  <div>
    <xsl:apply-templates select="." mode="common.html.attributes"/>
    <xsl:call-template name="id.attribute"/>
    <xsl:if test="@align = 'right' or @align = 'left' or @align='center'">
      <xsl:attribute name="align"><xsl:value-of select="@align"/></xsl:attribute>
    </xsl:if>
    <xsl:apply-templates/>
   </div>
   <div><xsl:value-of select="../blockinfo/bibliosource"/></div>   <!-- This line added; note blockinfo -->
</xsl:template>

<bibliosource>元素的文字将显示在标题正下方的单独<div>中。原始模板位于graphics.xsl中。