2 XML Dokumente; Knoten hinzufügen/ersetzen
Markus
- xsl
0 Thomas J.S.0 Markus0 Thomas J.S.0 Markus
Guten Abend,
Ich hab zwei XML Dokumente (A.xml und B. xml ) und möchte das das Dokument B.xml bei bestimmten Kriterien (beispielsweise weniger als zwei Elementknoten in B.xml enthalten) ein paar Elementknoten von A.xml übernimmt bzw. ersetzt.
Kann mir jemand eine Beispielsanfrage in XSL zeigen ?
Danke und gute Nachtruhe!
Hallo,
Ich hab zwei XML Dokumente (A.xml und B. xml ) und möchte das das Dokument B.xml bei bestimmten Kriterien (beispielsweise weniger als zwei Elementknoten in B.xml enthalten) ein paar Elementknoten von A.xml übernimmt bzw. ersetzt.
Kann mir jemand eine Beispielsanfrage in XSL zeigen ?
Nein, weil ich deine Frage leider nicht verstehe.
Was meinst du mit "übernimmt" und "ersetzt"? Du kannst mit XSL nicht so einfach in eine bestehende XML-Datei schreiben, dazu brauchst du schon eine serverseitige Verarbeitung.
Könntest du bitte die Frage nochmal erklären und auch was du schon versucht hast?
Grüße
Thomas
Hallo,
Ich versuch mich gerade an XLIFF Übersetzungen, dabei sollen italienische XLIFF Dateien die englischen XLIFF target files übernehmen
Ich versuchs mal an einem Beispiel zu erklären :
Dokument A.xml ist die englische XLIFF Datei mit den target tags :
...
<source>&Datei</source>
<target state="translated">&File</target>
...
Die italienische Übersetzung (B.xml) ist noch nicht soweit; deshalb steht hier nur das hier drin :
...
<source>&Datei</source>
...
Nun soll temporär die englische Übersetzung im italienischen XLIFF Dokument (B.xml) drinstehen; also im target soll folgendes erscheinen :
...
<source>&Datei</source>
<target>&File</target>
....
Ich hab leider nicht allzuviel versucht; bin seit einer Woche Praktikant und XSL(T)-Anfänger.
Hallo,
Ich hab leider nicht allzuviel versucht; bin seit einer Woche Praktikant und XSL(T)-Anfänger.
Da bekommt das "ins klate Wasser werfen" ja ganz neue dimensionen!
Ich versuch mich gerade an XLIFF Übersetzungen, dabei sollen italienische XLIFF Dateien die englischen XLIFF target files übernehmen
Mit richtigen XLIFF-Dateien, so nett mit default Namensraum etc?
Ich versuchs mal an einem Beispiel zu erklären :
Dokument A.xml ist die englische XLIFF Datei mit den target tags :
...
<source>&Datei</source>
<target state="translated">&File</target>
...Die italienische Übersetzung (B.xml) ist noch nicht soweit; deshalb steht hier nur das hier drin :
...
<source>&Datei</source>
...
Nun soll temporär die englische Übersetzung im italienischen XLIFF Dokument (B.xml) drinstehen; also im target soll folgendes erscheinen :...
<source>&Datei</source>
<target>&File</target>
....
Hier ein Beispiel mit zwei XLIFF-Dateien (vorausgesetzt eure sind ebenfalls konforme XLIFF-Dateien, ansonsten kannst du auf dem Namensraumangaben in dem XSL verzeichten)
Datei A.xml
-------------
<?xml version="1.0" encoding="iso-8859-1"?>
<xliff version="1.1" xmlns="urn:oasis:names:tc:xliff:document:1.1">
<file original="hello.txt" source-language="en" target-language="fr" datatype="plaintext">
<body>
<trans-unit id="hi">
<source>Hello world</source>
<target>Bonjour le monde</target>
<alt-trans>
<target xml:lang="es">Hola mundo</target>
</alt-trans>
</trans-unit>
<trans-unit id="file">
<source>File</source>
<target>Dossier</target>
<alt-trans>
<target xml:lang="es">Archivo</target>
</alt-trans>
</trans-unit>
</body>
</file>
</xliff>
-----------
Datei B.xml
-----------
<?xml version="1.0" encoding="iso-8859-1"?>
<xliff version="1.1" xmlns="urn:oasis:names:tc:xliff:document:1.1">
<file original="hello.txt" source-language="en" target-language="fr" datatype="plaintext">
<body>
<trans-unit id="hi">
<source>Hello world</source>
<target>Bonjour le monde</target>
<alt-trans>
<target xml:lang="es">Hola mundo</target>
</alt-trans>
</trans-unit>
<trans-unit id="file">
<source>File</source>
</trans-unit>
</body>
</file>
</xliff>
------------
Die XSL-Datei angewendet auf B.xml:
------------
<?xml version="1.0" encoding="iso-8859-1"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.1">
<xsl:output method="xml" indent="yes" encoding="iso-8859-1" />
<xsl:template match="/">
<xsl:apply-templates />
</xsl:template>
<xsl:template match="xliff:xliff | xliff:file | xliff:body">
xsl:copy
<xsl:copy-of select="@*" />
<xsl:apply-templates />
</xsl:copy>
</xsl:template>
<xsl:template match="xliff:trans-unit">
<xsl:variable name="currentid" select="@id" />
xsl:copy
<xsl:copy-of select="@*" />
<xsl:apply-templates mode="copy" />
<xsl:if test="not(xliff:source)">
<xsl:apply-templates select="document('A.xml')//xliff:trans-unit[@id = $currentid]/xliff:source" mode="copy" />
</xsl:if>
<xsl:if test="not(xliff:target)">
<xsl:apply-templates select="document('A.xml')//xliff:trans-unit[@id = $currentid]/xliff:target" mode="copy" />
</xsl:if>
<xsl:if test="not(xliff:alt-trans)">
<xsl:apply-templates select="document('A.xml')//xliff:trans-unit[@id = $currentid]/xliff:alt-trans" mode="copy" />
</xsl:if>
</xsl:copy>
</xsl:template>
<xsl:template match="xliff:*" mode="copy">
xsl:copy
<xsl:copy-of select="@*" />
<xsl:apply-templates mode="copy" />
</xsl:copy>
</xsl:template>
</xsl:stylesheet>
------------
Ausgabe von Saxon8:
------------
<?xml version="1.0" encoding="iso-8859-1"?>
<xliff xmlns="urn:oasis:names:tc:xliff:document:1.1" version="1.1">
<file original="hello.txt" source-language="en" target-language="fr" datatype="plaintext">
<body>
<trans-unit id="hi">
<source>Hello world</source>
<target>Bonjour le monde</target>
<alt-trans>
<target xml:lang="es">Hola mundo</target>
</alt-trans>
</trans-unit>
<trans-unit id="file">
<source>File</source>
<target>Dossier</target>
<alt-trans>
<target xml:lang="es">Archivo</target>
</alt-trans>
</trans-unit>
</body>
</file>
</xliff>
-------------
Grüße
Thomas
Da bekommt das "ins klate Wasser werfen" ja ganz neue dimensionen!
Da hast du schon recht; aber zum Glück gibts hilfsbereite Menschen !
Herzlichen Dank für deine komplette Ausführung. Sehr, sehr hilfreich !
Viele Grüße,
Markus