Thomas J.S.: Attribute ersetzen

Beitrag lesen

Hallo,

So jetzt hab ichs hinbekommen bis auf ne kleinigkeit.

Das saprt Zeit (für mich) ;-)

so nun zur kleinigkeit: ich brauche entweder einen weg wie ich die for schleife nach dem finden des entsprechenden wortes verlassen kann. soweit ich aber geleesn habe ist das mit der for schleife [...]

for-each ist keine Schleife.
Betrachte for-each einfach als eine andere Art vom Template. Es wird für jeden der Knoten auf dem die Bedingung (im select="") passt, neu instantiiert.

<!-- so hier is das problem-->
   <xsl:for-each select="$dict/tmx/body/*">
   xsl:choose
    <xsl:when test="tuv[@xml:lang=$source_lang]/seg=$thisWord">
     <xsl:value-of select="tuv[@xml:lang=$target_lang]/seg" />
    </xsl:when>
    xsl:otherwise
     <xsl:if test="$dict/tmx/body/tu[last()]/tuv[last()]=tuv[last()]">
      <xsl:value-of select="$thisWord" />
     </xsl:if>
    </xsl:otherwise>
   </xsl:choose>
   </xsl:for-each>

Na ja du machst die Ausgabe aber auch für jedes Element im body.
Was du hier suchts ist eigentlich:
<xsl:for-each select="$dict/tmx/body/tu[tuv[@xml:lang=$source_lang]/seg = $thisWord]">

Was du mit "if" im "otherwise" testen willst bzw. der Sinn dahinter, ist mir aber nicht klar.

An deiner Stelle würde ich aber auf das for-ech im Attribut-Template verzeichten und dies weiter oben machen:
--------------------------------------------
<?xml version="1.0" encoding="iso-8859-1"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
 <xsl:output method="xml" indent="yes"/>
 <xsl:strip-space elements="*"/>

<xsl:param name="targetLang"/>
 <xsl:variable name="dict" select="document('ProgalDict.tmx')"/>
 <xsl:variable name="source_lang" select="$dict/tmx/header/@srclang"/>

<xsl:template match="/">
  <xsl:apply-templates select="*"/>
 </xsl:template>

<xsl:template match="*">
  xsl:copy
   <xsl:for-each select="@*">
    <xsl:attribute name="{name()}">
     <xsl:call-template name="trans">
      <xsl:with-param name="target_lang" select="$targetLang"/>
      <xsl:with-param name="thisWord" select="."/>
     </xsl:call-template>
    </xsl:attribute>
   </xsl:for-each>
   <xsl:apply-templates select="*"/>
  </xsl:copy>
 </xsl:template>

<xsl:template name="trans">
  <xsl:param name="target_lang"/>
  <xsl:param name="thisWord"/>
  xsl:choose
   <xsl:when test="$dict/tmx/body//tuv[@xml:lang=$source_lang]/seg=$thisWord">
    <xsl:value-of select="$dict/tmx/body/tu[tuv[@xml:lang=$source_lang]/seg=$thisWord]/tuv[@xml:lang=$target_lang]/seg"/>
   </xsl:when>
   xsl:otherwise
    <xsl:if test="$dict/tmx/body/tu[last()]/tuv[last()]=tuv[last()]">
     <xsl:value-of select="$thisWord"/>
    </xsl:if>
   </xsl:otherwise>
  </xsl:choose>
 </xsl:template>
</xsl:stylesheet>
------------------------------------------------

Grüße
Thomas