Frage

Ich änderte vor kurzem ein paar meiner .xml-Dateien von DocBook zu DITA. Die Umwandlung war ok, aber es gibt einige unerwünschte Artefakte. Der, den ich auf stapfte bin ist, dass .dita nicht die <para> Tag aus docbook hat recongnize, und ersetzt sie durch <p>. Welche würden Sie denken, fein wären, aber dies bewirkt, dass die XML-Elemente anzuzeigen, in und geordnete Liste wie in der nächsten Zeile zu sein, das heißt:

1
 item One
2
 item Two

statt:

1 item One
2 item Two

so, wie ich dies tun ändern:

<section>
<title>Cool Stuff</title>
<orderedlist>
  <listitem>
    <para>ItemOne</para>
  </listitem>

  <listitem>
    <para>ItemTwo</para>
  </listitem>
</orderedlist>

folgt aus:

<section>
<title>Cool Stuff</title>
<orderedlist>
  <listitem>
    ItemOne
  </listitem>

  <listitem>
    ItemTwo
  </listitem>
</orderedlist>

Es tut mir leid, ich sollte mehr klar mit der Frage gewesen. Ich brauche alle Tags aus dem doument zu entfernen, die auf unterschiedlichen Ebenen der Tiefe, aber die (lokale) Baum listitem / para immer folgen. Ich bin ein bisschen neu in diesem, kann aber ich kann einfach falsch, indem sie es Anheften auf meine docbook2dita Transformation tut es werden. Kann es an diesem Ort sein?

War es hilfreich?

Lösung

Ich würde dieses Sheet verwenden:

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
    <xsl:template match="@*|node()">
        <xsl:copy>
            <xsl:apply-templates select="@*|node()"/>
        </xsl:copy>
    </xsl:template>
    <xsl:template match ="listitem/para">
        <xsl:apply-templates/>
    </xsl:template>
</xsl:stylesheet>

Hinweis : Überschreiben Identität Regel. listitem/para umgangen wird (diese Konserven gemischter Inhalt)

Andere Tipps

Sie können die DITA-Dateien mit einem XSLT, dass filtert den <para> Knoten verarbeiten:

<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
  <xsl:output method="xml" indent="yes"/>

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

  <!-- replace para nodes within an orderedlist with their content -->     
  <xsl:template match ="orderedlist/listitem/para">
    <xsl:value-of select="."/>
  </xsl:template>

</xsl:stylesheet>

Ich hatte ein ähnliches Problem, aber qtdom bin mit der immer 100% nicht funktioniert wie die XSLT-2.x-Spezifikationen. (Ich denke irgendwann an die Apache-Bibliothek von Schalt ...)

Ich wollte das äquivalent "listitem" in meinem Code in einem div mit einer entsprechenden Klasse ändern:

<xsl:for-each select="/orderedlist/lisitem">
  <div class="listitem">
    <xsl:apply-templates select="node()"/>
  </div>
</xsl:for-each>

Dies entfernt die listitem und ersetzt es mit

Dann wird die Vorlage, was Sie in haben, in meinem Fall, kann Tags enthalten, so dass ich nicht die beiden anderen Beispiel verwenden könnte, die alles in Klartext umwandeln würde. Stattdessen verwendete ich, dass:

<xsl:template match ="para">
  <xsl:copy-of select="node()"/>
</xsl:template>

Das entfernt die „para“ -Tags, aber hält alle die Kinder gibt. So können Absätze enthalten Formatierungen und es wird über die XSLT-Verarbeitung erhalten.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top