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