Docbook 5 XSLT: запрос и возвращаемое значение элемента "edition" не выполнены - PullRequest
1 голос
/ 19 декабря 2011

Я использую docbook5 с кислородным редактором XML. Я собираюсь в PDF через XSLTproc и FOP. Я пытаюсь заставить значение тега "edition" отображаться в нижнем колонтитуле, но это не работает правильно.

Учитывая документацию 5 источник:

<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE book
<book version="5.0" xmlns="http://docbook.org/ns/docbook"
   xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:xi="http://www.w3.org/2001/XInclude" 
   xmlns:svg="http://www.w3.org/2000/svg" xmlns:m="http://www.w3.org/1998/Math/MathML"
   xmlns:html="http://www.w3.org/1999/xhtml" xmlns:db="http://docbook.org/ns/docbook">
      <info>
        <title>User Manual</title>
        <edition>Ed. 123456</edition>
      </info>
</book>

И шаблон нижнего колонтитула:

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
    xmlns:fo="http://www.w3.org/1999/XSL/Format" version="1.0">

<xsl:template name="footer.content">  
  <xsl:param name="pageclass" select="''"/>
  <xsl:param name="sequence" select="''"/>
  <xsl:param name="position" select="''"/>
  <xsl:param name="gentext-key" select="''"/>

  <fo:block>  
    <!-- sequence can be odd, even, first, blank -->
    <!-- position can be left, center, right -->
    <xsl:choose>

      <xsl:when test="$sequence = 'odd' and $position = 'left'">  
        <fo:retrieve-marker retrieve-class-name="section.head.marker"  
                        retrieve-position="first-including-carryover"
                        retrieve-boundary="page-sequence"/>
      </xsl:when>

      <xsl:when test="$sequence = 'odd' and $position = 'center'">
         <xsl:value-of select="ancestor-or-self::book/info/edition"/>  
      </xsl:when>

    </xsl:choose>
  </fo:block>
</xsl:template>
</xsl:stylesheet>

Значение возвращается корректно, когда я запрашиваю запрос из раздела oxygenxml xquery на панели инструментов, но не при обработке документа в PDF. Любая помощь будет супер!

1 Ответ

1 голос
/ 20 декабря 2011

Вы должны принять во внимание пространство имен DocBook. По соглашению URI пространства имен сопоставляется с префиксом d в таблицах стилей. Сделайте это в вашем файле настроек:

  1. Добавить

    xmlns:d="http://docbook.org/ns/docbook" 
    exclude-result-prefixes="d"
    

    к корню <xsl:stylesheet> элемента.

  2. Изменить

    <xsl:value-of select="ancestor-or-self::book/info/edition"/>
    

    до

    <xsl:value-of select="ancestor-or-self::d:book/d:info/d:edition"/>    
    
...