2011-12-21 3 views
2

Написание некоторых таблиц стилей для DocBook.Docbook XSL: установить размер/масштаб по умолчанию для элементов imagedata?

Edit:на комментарий ниже: Да, это означает, что я пишу пользовательские настройки на основе DocBook-XSL таблицы стилей, а не переписывать существующие таблицы стилей DocBook.

Возможно ли с помощью таблицы стилей XSL установить размер/масштаб по умолчанию для imagedata элементов, особенно в выходных данных печати?

По существу я хочу, чтобы установить вещи таким образом, что, если я включаю scalefit, width и/или contentdepth атрибуты в качестве imagedata элемента, будут использоваться эти атрибуты; однако, если они не включены, они будут по умолчанию scalefit="1" width="100%" contentdepth="100%".

Кажется, достаточно просто, но я новичок XSLT, а googling не дал мне ниоткуда. Это возможно? Как?

Спасибо!

+0

Когда вы говорите «Написание некоторых таблиц стилей для DocBook», вы на самом деле имеете в виду, что вы пишете настройки на основе [Таблицы стилей DocBook-XSL] (https://sourceforge.net/projects/docbook/)? – mzjn

ответ

3

По существу я хочу, чтобы установить вещи таким образом, что, если я включаю scalefit, width и/или contentdepth атрибутов в качестве imagedata элемента, будут использоваться эти атрибуты; однако, если они не включены, они будут по умолчанию scalefit="1" width="100%" contentdepth="100%".

Это преобразование:

<xsl:stylesheet version="1.0" 
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 
<xsl:output omit-xml-declaration="yes" indent="yes"/> 
<xsl:strip-space elements="*"/> 

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

<xsl:template match="imagedata[not(@scalefit|@width|@contentdepth)]"> 
    <imagedata scalefit="1" width="100%" contentdepth="100%"> 
    <xsl:copy-of select="@*"/> 

    <xsl:apply-templates/> 
    </imagedata> 
</xsl:template> 
</xsl:stylesheet> 

при нанесении на следующий документ XML:

<t> 
<imagedata scalefit="1" width="80%" contentdepth="90%"/> 
<imagedata/> 
</t> 

производит разыскиваемого, правильный результат:

<t> 
    <imagedata scalefit="1" width="80%" contentdepth="90%"/> 
    <imagedata scalefit="1" width="100%" contentdepth="100%"/> 
</t> 

Объяснение: Игнорирование правило в идентичности для любого imagedata, который не имеет ни один из атрибутов scalefit, width и contentdepth.

+0

Спасибо за быстрый ответ ... Однако я получаю следующую ошибку, когда добавляю эти шаблоны в таблицу стилей: net.sf.saxon.trans.XPathException: org.apache.fop.fo.ValidationException: fo: root "отсутствует дочерние элементы. Требуемая модель содержимого: (layout-master-set, declarations ?, bookmark-tree ?, (page-sequence | fox: external-document) +) ... любая идея, что это значит? – DanM

+0

@ DanM: Я ничего не знаю о XSL-FO.В этом ответе я представил решение, которое работает с любым XML-документом - вам нужно приспособить его к * вашему * XML-документу, который, я считаю, был бы примером любого XSL-FO - это означает, что вам нужно удовлетворить любые синтаксические и семантические требования XSL-FO в вашей программе XSL-FO - и они вообще не связаны с вашим вопросом, а именно: как добавлять атрибуты по умолчанию к элементу, который не имеет этих атрибутов, - и на который был дан полный ответ. –

+0

Понял. Благодаря! – DanM

 Смежные вопросы

  • Нет связанных вопросов^_^