Question

J'ai récemment changé deux de mes fichiers .xml de DocBook vers DITA. La conversion est bien passé, mais il y a quelques artefacts indésirables. Celui que je suis perplexe sur est que .dita ne recongnize pas la balise <para> de DocBook, et le remplace par <p>. Ce qui vous penseriez serait bien, mais cela provoque le XML pour afficher les éléments dans l'ordre et la liste comme étant sur la ligne suivante, i.e.:

1
 item One
2
 item Two

au lieu de:

1 item One
2 item Two

Alors, comment puis-je changer ceci:

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

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

à ceci:

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

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

Je suis désolé, j'aurais été plus clair avec la question. Je dois enlever tous les tags du doument qui sont à différents niveaux de profondeur, mais toujours suivre le (local) arbre listitem / para. Je suis un peu nouveau à cela, mais pourrais-je pouvais être le faire mal en clouant à ma transformation docbook2dita. Peut-il être à cet endroit?

Était-ce utile?

La solution

J'utiliser cette feuille de style:

<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>

Remarque : Ecraser règle d'identité. listitem/para sont contournés (ce conserve un contenu mixte)

Autres conseils

Vous pouvez traiter les fichiers DITA avec un XSLT qui filtre les nœuds <para>:

<?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>

J'ai eu un problème similaire, mais je suis utilise qtdom qui ne fonctionne pas toujours à 100% comme les spécifications 2.x XSLT. (Je pense à passer à la bibliothèque Apache à un moment donné ...)

Je voulais changer le « listitem » équivalent dans mon code dans un div avec une classe correspondant:

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

Cela supprime le listitem et le remplace par

Ensuite, le modèle, ce que vous avez dans , dans mon cas, peut inclure des balises, donc je ne pouvais pas utiliser les deux autres exemple qui transformerait tout en texte brut. Au lieu de cela je que:

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

Cela supprime les balises « para », mais conserve tous les enfants est. Ainsi, les paragraphes peuvent inclure le formatage et il est conservé à travers le traitement XSLT.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top