0

我有以下结构

    <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>正确转换的指导。

谢谢!

4

1 回答 1

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>

以上适用于命名空间感知的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 中。

于 2013-08-19T15:44:26.160 回答