#xslt #docbook
#xslt #docbook
Вопрос:
У меня есть XML-файл DocBook 4.4, который является руководством пользователя. Я могу использовать инструменты (Maven) для преобразования этого в HTML, PDF без проблем. Проблема, с которой я сталкиваюсь, заключается в том, чтобы вставить небольшой фрагмент HTML-кода в результирующий HTML-файл.
Я хотел бы добавить следующий фрагмент HTML:
<xsl:template name="xxxxxxx">
<img src="images/pdfdoc.gif">PDF</img>
</xsl:template>
Результирующий HTML-код выглядит следующим образом:
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>Title</title>
<link rel="stylesheet" type="text/css" href="./hilfeKMV.css">
<meta name="generator" content="DocBook XSL Stylesheets V1.76.0">
<meta name="date" content="10/12/2011">
</head>
<body bgcolor="white" text="black" link="#0000FF" vlink="#840084"
alink="#0000FF">
<div lang="de" class="book"
title="Title">
<div class="titlepage">
<div>
<div>
<h1 class="title">
<a name="d0e1"></a>title
</h1>
</div>
</div>
<hr>
</div>
<div class="toc">
<p>
<b>TOC</b>
</p>
Я хотел бы вставить фрагмент HTML перед <div class="toc">
…Итак, вопрос в том, как это решить? Я использую docbook 1.76.0
Я думаю, что для решения этой проблемы должно быть что-то вроде следующего, но я не знаю, как установить шаблон вызова и т. Д. ?
<xsl:template name="xxxxxxx">
<xsl:variable name="top-anchor">
<xsl:call-template name="object.id">
<xsl:with-param name="object" select="/*[1]"/>
</xsl:call-template>
</xsl:variable>
<img src="images/pdfdoc.gif">PDF</img>
</xsl:template>
Комментарии:
1. Итак, на основе ваших входных данных вы хотели бы иметь что-то вроде: <img src=»images/pdfdoc.gif «>PDF</img> как родной брат <div class=»toc»>, хотя и до div?
2. Вам нужно заставить Docbook выводить результат в хорошо оформленном XML (XHTML) — возможно, используйте Docbook для XSLT 2.0 и просто установите метод вывода в XHTML — и затем вы можете применить модификацию правила идентификации, чтобы просто добавить новый элемент.
3. @FailedDev Нет. Я хотел бы иметь его отдельно. Но, конечно, я могу поместить что-то вокруг <img..>, например <div> …</div>, это не проблема. Но мне нужно, чтобы он был перед class=»toc» div и после div class=»titlepage».
Ответ №1:
<div class="toc">
Элемент генерируется шаблоном с именем «make.toc», который вызывается «division.toc» (в autotoc.xsl). Чтобы вывести что-то непосредственно перед этим <div>
, вы можете переопределить шаблон «division.toc» в вашем уровне настройки. Просто скопируйте исходный шаблон и добавьте свой код, например:
<xsl:template name="division.toc">
<xsl:param name="toc-context" select="."/>
<xsl:param name="toc.title.p" select="true()"/>
<img src="images/pdfdoc.gif" alt="PDF"/> <!-- Your stuff here -->
<xsl:call-template name="make.toc">
...
...
</xsl:call-template>
</xsl:template>
Ответ №2:
Я нашел правильное место для вставки нужного мне кода. В файле titlepage.templates.xsl я нашел правильное решение. Я просто взял фрагмент из titlepage.templates.xsl и улучшил его следующим образом:
<xsl:template name="book.titlepage.separator">
<div class="subsubtile">
<div class="pdflink">
<a href="./xxxx.pdf" title="Hilfeseite als PDF-Dokument">
<img src="images/pdfdoc.gif" border="0" alt="Hilfeseite als PDF-Dokument" />
<br />
PDF
</a>
</div>
</div>
<hr/>
</xsl:template>