Соответствующий специфический атрибут XSL - PullRequest
1 голос
/ 25 ноября 2010

У меня есть куча файлов документации, которые имеют различные атрибуты на своих изображениях.Я хочу, чтобы все они имели 1 уникальный атрибут и 3 идентичных атрибута:

  <section xmlns="http://docbook.org/ns/docbook" version="5" xml:id="cancelDia">
    <title>Screenshot</title>
    <mediaobject>
      <imageobject>
        <imagedata fileref="screenshots/cancelDialog.png" scalefit="1" width="100%" contentdepth="100%"/>
      </imageobject>
    </mediaobject>
  </section>

Fileref уникален и должен быть оставлен в покое, но scalefit, width и contentdepth должны быть одинаковыми для всех <imagedata>.Одна из проблем заключается в том, что большинство данных изображения имеют масштабирование, некоторые имеют ширину, а редкие имеют глубину содержимого.Как я могу гарантировать, что даже если у них уже есть этот атрибут, все мои <imagedata> имеют одинаковый масштаб, ширину и глубину содержимого?

Примечание. Я не уверен, имеет ли это значение, но я использую docbook5

Ответы [ 2 ]

4 голосов
/ 25 ноября 2010

Эта таблица стилей:

<xsl:stylesheet version="1.0"
 xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
 xmlns:doc="http://docbook.org/ns/docbook"
 xmlns="http://docbook.org/ns/docbook"
 exclude-result-prefixes="doc">
    <xsl:template match="node()|@*">
        <xsl:copy>
            <xsl:apply-templates select="node()|@*"/>
        </xsl:copy>
    </xsl:template>
    <xsl:template match="doc:imagedata">
        <imagedata fileref="{@fileref}"
                       scalefit="1" width="100%" contentdepth="100%"/>
    </xsl:template>
</xsl:stylesheet>

Вывод:

<section version="5" xml:id="cancelDia" xmlns="http://docbook.org/ns/docbook">
    <title>Screenshot</title>
    <mediaobject>
        <imageobject>
            <imagedata fileref="screenshots/cancelDialog.png" 
                       scalefit="1" width="100%" contentdepth="100%" />
        </imageobject>
    </mediaobject>
</section>

Редактировать : соответствие нового входного образца.

1 голос
/ 25 ноября 2010

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

<xsl:stylesheet version="1.0"
 xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
 xmlns:d="http://docbook.org/ns/docbook"
 xmlns="http://docbook.org/ns/docbook"
 xmlns:ext="http://exslt.org/common"
 exclude-result-prefixes="d ext">
 <xsl:output omit-xml-declaration="yes" indent="yes"/>
 <xsl:strip-space elements="*"/>

 <xsl:param name="pAttribs">
  <p scalefit="1" width="100%" contentdepth="100%"/>
 </xsl:param>

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

 <xsl:template match="d:imagedata">
  <xsl:copy>
   <xsl:copy-of select="@fileref
    |
     ext:node-set($pAttribs)/*/@*"/>
  </xsl:copy>
 </xsl:template>
</xsl:stylesheet>

при применении к предоставленному XML-документу :

<section xmlns="http://docbook.org/ns/docbook"
         version="5" xml:id="cancelDia">
    <title>Screenshot</title>
    <mediaobject>
        <imageobject>
            <imagedata fileref="screenshots/cancelDialog.png"
             scalefit="1"
             width="100%"
             contentdepth="100%"/>
        </imageobject>
    </mediaobject>
</section>

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

<section xmlns="http://docbook.org/ns/docbook"
         version="5" xml:id="cancelDia">
   <title>Screenshot</title>
   <mediaobject>
      <imageobject>
         <imagedata fileref="screenshots/cancelDialog.png" 
                    scalefit="1" width="100%" contentdepth="100%"/>
      </imageobject>
   </mediaobject>
</section>

Запишите :

Все требуемые значения задаются как атрибуты элемента внутри внешнего <xsl:param>

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...