<?xml version="1.0"?>
<?xml-stylesheet href="/pool/xslt_ht.xslt" type="application/xml"?>
<xsl:stylesheet
  xmlns:xsl = "http://www.w3.org/1999/XSL/Transform"
  xmlns:d = "http://herbaer.de/xmlns/20051201/doc"
  xmlns:xl = "urn:oasis:names:tc:xliff:document:2.0"
  xmlns = "urn:oasis:names:tc:xliff:document:2.0"
  exclude-result-prefixes = "d"
  version = "1.0"
>
<d:info xmlns="http://herbaer.de/xmlns/20051201/doc">
  <title>xliff_clean.xslt</title>
  <subtitle>Leere unit-Elemente entfernen</subtitle>
  <date>2015-04-08</date>
  <author>
    <personname>
      <firstname>Herbert</firstname>
      <surname>Schiemann</surname>
    </personname>
    <email>h.schiemann@herbaer.de</email>
  </author>
</d:info>

<d:section xmlns="http://herbaer.de/xmlns/20051201/doc" role="stylesheet">
  <para>
Die Transformation
<filename>skeleton_xliff.xslt</filename> kann
Elemente erzeugen,
die nicht den erforderlichen Inhalt enthalten,
z.B. leere
<tag class="element">source</tag>- oder
<tag class="element">mrk</tag>-Elemente.
Diese Transformation entfernt diese Elemente.
  </para>
</d:section>

<xsl:output method="xml" indent="yes"/>

<d:para>
Wurzel
</d:para>
<xsl:template match="/">
  <xsl:apply-templates select="processing-instruction() | comment() | text() | *"/>
</xsl:template>

<d:para>
Textknoten und Attribute werden kopiert
</d:para>
<xsl:template match="processing-instruction() | comment() | text() | @*">
  <xsl:copy-of select="."/>
</xsl:template>

<d:para>
<d:tag class="element">unit</d:tag>-Elemente, die kein
<d:tag class="element">segment</d:tag>- oder
<d:tag class="element">ignorable</d:tag>-Element enthalten,
werden ignoriert.
</d:para>
<xsl:template
  match = "
    xl:unit [ not (
    xl:segment/xl:source//text() [string-length(normalize-space(.)) &gt; 0]
    | xl:ignorable )]
  "
/>

<d:para>
<d:tag class="element">segment</d:tag>-Elemente ohne echten source-Inhalt
werden ignoriert.
</d:para>
<xsl:template
  match =
  "xl:segment [ not (xl:source//text() [string-length(normalize-space(.)) &gt; 0]) ]"
/>

<d:para>
<d:tag class="element">mrk</d:tag>-Elemente ohne echten Inhalt werden ignoriert.
</d:para>
<xsl:template match="xl:mrk [ not (.//text() [string-length(normalize-space(.)) &gt; 0]) ]"
/>

<d:para>
Andere Elemente werden kopiert.
</d:para>
<xsl:template match="*">
  <xsl:copy>
    <xsl:apply-templates select="@*"/>
    <xsl:choose>
      <xsl:when
        test = "
          text() [string-length(normalize-space(.)) &gt; 0]
          | processing-instruction()
          | comment()
        "
      >
        <xsl:apply-templates select="text() | processing-instruction() | comment() | *"/>
      </xsl:when>
      <xsl:otherwise>
        <xsl:apply-templates select="*"/>
      </xsl:otherwise>
    </xsl:choose>
  </xsl:copy>
</xsl:template>

</xsl:stylesheet>
