Добавление нового элемента в Docbook - PullRequest
0 голосов
/ 23 апреля 2020

Я новичок в docbook и XSLT, я пытаюсь добавить новый элемент в мой docbook. У меня есть XML, что-то вроде этого:

 <?xml version='1.0' encoding='UTF-8'?>
    <book  version="5.0"
      xmlns="http://docbook.org/ns/docbook"> 
    <d:chapter>
            <d:title/>
            <d:section>
              <d:title>Section 1</d:title>
              <d:simpara>texte   </d:simpara>
            </d:section>
          </d:chapter>
        </d:book>

Мне нужно сделать несколько преобразований в один шаг; Первое преобразование - добавление нового раздела с заголовком и текстом в структуре docbook xml, а затем создание преобразования, чтобы получить мой выходной файл в виде файла PDF во втором преобразовании. Я создаю новый элемент внутри переменной, преобразую содержимое переменной в набор узлов с помощью функции exlt: node-set (), а затем обрабатываю набор узлов со стандартными таблицами стилей DocBook, чтобы получить вывод в формате PDF

<?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"
        xmlns:set="http://exslt.org/sets"
        xmlns:saxon="http://icl.com/saxon"
        xmlns:exsl="http://exslt.org/common"
        extension-element-prefixes="exsl"
        xmlns:d="http://docbook.org/ns/docbook"
        exclude-result-prefixes="d"
        version="1.0">

    <?cco_xsltype addon="DocBook5.0" toolchain="DocBook_to_PDF_FOP"?>
    <!-- Import standard -->

    <xsl:import href="http://docbook.sourceforge.net/release/xsl/current/fo/profile-docbook.xsl"/>
    <!-- DocBook XSL Parameters -->

    <xsl:template match="node() | @*" mode="change"> 
        <xsl:copy>  
            <xsl:apply-templates select="@* | node()" mode="change"/>  
        </xsl:copy>
    </xsl:template>         
    <xsl:template match="d:chapter" mode="change">

        <xsl:copy> 
            <xsl:copy-of select="@*"/>
            <xsl:copy-of select="*"/>
            <d:section>
                <d:title> Cette section a été ajoutée </d:title>
                <d:para> ce texte a été ajouté </d:para>
            </d:section>
        </xsl:copy>
    </xsl:template>
<xsl:template match="d:book" >

<xsl:variable name="content"> 
        <xsl:apply-templates mode="change"/> 
    </xsl:variable>

    <xsl:apply-templates select="exsl:node-set($content)/*"  /> 

</xsl:template> 

</xsl:stylesheet>

В результате я ожидаю pdf-файл с двумя разделами.

Спасибо за любую помощь.

1 Ответ

0 голосов
/ 07 мая 2020

Не уверен, что это может ответить на ваш вопрос. Но похоже, что вы хотите добавить необязательный стандартный абзац к каждому документу.

Если входной документ содержит определенную переменную, он заменяется стандартным абзацем. Этот абзац является частью XSL.

Если это действительно так, то почему бы не объединить XML документов и фрагментов с помощью XInclude ? Это хорошая возможность для включения документа XML в другие документы XML. Хорошее начало - Понимание XInclude .

...