DocBook XSL: Как сохранить HTML в таблице CALS во время преобразования в таблицу HTML - PullRequest
0 голосов
/ 30 октября 2018

Мы используем DocBook XSLT для преобразования таблиц CALS в HTML для вывода в Интернете. Некоторые из наших таблиц CALS содержат разметку HTML, в частности списки. Я не уверен, что это нормально, но наш механизм форматирования печати (PDF), который получает таблицы CALS в качестве входных данных, обрабатывает это.

Однако, когда таблицы CALS преобразуются в HTML, разметка списка с тегами отображается в виде строк, а вложенность списка сохраняется в промежутках (странно!).

Обновление: Я подозреваю, что я что-то не так делаю в своем приложении XSLT DocBook, которое предназначено для преобразования таблиц при простом копировании всего другого содержимого из документа со смешанным типом содержимого. Вот воспроизводимый пример:

CALS input:

  <section>
    <table>
      <tgroup cols="1">
        <colspec colname="col1"/>
        <tbody>
          <row>
            <entry>
              <ol list-style-type="lower-alpha" period-paren="paren">
                <li>This is a nested list:<ol list-style-type="number" period-paren="paren">
                  <li>I'm a list item.</li>
                  <li>I'm another list item!</li>
                </ol></li>
                <li>Yet another nested list:<ol list-style-type="number" period-paren="paren">
                  <li>YALI</li>
                  <li>YAYALI</li>
                </ol></li>
              </ol>
            </entry>
          </row>
        </tbody>
      </tgroup>
    </table>
  </section>

XSLT:

<xsl:stylesheet version="2.0"
                xmlns:html="http://www.w3.org/1999/xhtml"
                xmlns:xsl="http://www.w3.org/1999/XSL/Transform">

  <xsl:import href="docbook-xsl-1.75.2/xhtml/docbook.xsl"/>

  <xsl:template match="/ | /*">
    <xsl:apply-templates mode="initial"/>
  </xsl:template>

  <xsl:template match="table" mode="initial">
    <xsl:apply-templates select="." mode="#default"/>
  </xsl:template>

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

</xsl:stylesheet>

Выход:

<section><div class="table" xmlns="http://www.w3.org/1999/xhtml">
  <a id="n5dd3b973684deaa" xmlns:saxon="http://icl.com/saxon"></a><p class="title"><b></b></p>
  <div class="table-contents">
    <table border="1"><tbody><tr><td>
    <span style="color: red">&lt;ol&gt;
      <span style="color: red">&lt;li&gt;This is a nested list:<span style="color: red">&lt;ol&gt;
        <span style="color: red">&lt;li&gt;I'm a list item.&lt;/li&gt;</span>
        <span style="color: red">&lt;li&gt;I'm another list item!&lt;/li&gt;</span>
      &lt;/ol&gt;</span>&lt;/li&gt;</span>
      <span style="color: red">&lt;li&gt;Yet another nested list:<span style="color: red">&lt;ol&gt;
        <span style="color: red">&lt;li&gt;YALI&lt;/li&gt;</span>
        <span style="color: red">&lt;li&gt;YAYALI&lt;/li&gt;</span>
      &lt;/ol&gt;</span>&lt;/li&gt;</span>
    &lt;/ol&gt;</span>
    </td></tr></tbody></table>
  </div></div>
<br class="table-break" xmlns="http://www.w3.org/1999/xhtml"/>
</section>

1 Ответ

0 голосов
/ 01 ноября 2018

Хотя мне не удалось определить причину сбежавшей разметки, разметка HTML может быть просто переопределена с помощью шаблона с более высоким приоритетом в основном XSLT:

<xsl:template match="ol" mode="#all">
  <xsl:copy-of select="."/>
</xsl:template>
...