XML und URL Parameter

Hallo Zusammen

Momentan arbeite ich an mehrsprachigen Preislisten. Sämtliche Produkte und Preise werden in einem XML pro Lieferant abgespeichert und danach mit XSL transformiert (für die Darstellung im Web). Nun haben die Produkte ja je nach Sprache einen anderen Namen und deshalb sollte auch je nach Sprache ein eigenes XSL angezogen werden. Kann ich das irgendwie realisieren?

D.h. ich rufe das XML mit haendler.xml?language=english auf und innerhalb vom XML kann ich dann auf den Parameter so reagieren, dass das englische XSL für die Transformation benutzt wird.

Oder stell ich mir das zu einfach vor?

Danke und Gruss
Andrea

Hallo Andrea

Is (für mich) garnicht so einfach.

Erste Idee: man übergebe an eine function die einzelnen Sprachelemente und prüfe gegen den Parameter „Language“.

In die Variable Language schreibt man den Parameter der URL:
var paramstr = document.URL.substring(document.URL.indexOf(’?’) + 1).split(’&’);
for (i=0; i

<!–
outText(’<xsl:copy-of select="$lang" />’,’<xsl:copy-of select="$text" />’)
–>

Die beiden vars mit den Werten entsprechend dem vorhandenen XML belegen. Natürlich alles schön in das XSLT einbetten!

Das war schnell und nicht sehr schön. Aber:

Andere Varianten sind denkbar. Werden die XML statisch geschrieben?
Man könnte dann direkt die XML in der geforderten Sprachen bei sonst gleicher Struktur erstellen (inhalt.xml.deu, inhalt.xml.eng oder so) und den „Richtigen“ Strom anziehen. Dann brauchst du nur ein XSLT. Über XML Controls (aspx, c#) kann man Parameter für die Transformation übergeben, die dann in einem auzuwerten währen. oder …

Einfacher ist es vielleicht die XML on Demand zu generieren und dann direkt die richtige Sprache einzubauen.

Bei Interesse mal die „gesamte Struktur“ angeben.

mfg

Dirk

Hallo Dirk

Is (für mich) garnicht so einfach.

Jepp für mich ja auch nicht ;o)

Erste Idee: man übergebe an eine function die einzelnen
Sprachelemente und prüfe gegen den Parameter „Language“.

Fällt leider weg, da ich das Xml direkt anziehen möchte (so in der Art: http://www.meinserver.com/haendler.xml?language=english. Leider ist es mir mit der Funktionalität nicht gelungen den Sprachparameter im XSL wieder auszulesen. Er erkennt zwar, dass ein Parameter da ist, weiss aber nicht, was für einer. *ärger*

Andere Varianten sind denkbar. Werden die XML statisch
geschrieben?
Man könnte dann direkt die XML in der geforderten Sprachen bei
sonst gleicher Struktur erstellen (inhalt.xml.deu,
inhalt.xml.eng oder so) und den „Richtigen“ Strom anziehen.

Eigentlich gute Idee, kann ich XMLs in andere importieren? Dann könnte ich einfach die sprachabhängigen Tags in unterschiedlichen XMLs verarbeiten und den Rest importieren.

Dann brauchst du nur ein XSLT. Über XML Controls (aspx, c#)
kann man Parameter für die Transformation übergeben, die dann
in einem auzuwerten währen. oder …

Du meinst das XML immer in Runtime durch die Transformation jagen? Wollte ich eigentlich aus Performancegründen vermeiden.

Einfacher ist es vielleicht die XML on Demand zu generieren
und dann direkt die richtige Sprache einzubauen.

Auch hier stört mich eigentlich das on Demand. Eine Möglichkeit wäre jedoch die XMLs beim Erstgebrauch zu übersetzen und danach als HTML abzuspeichern. Danach könnte ich beim nächsten Aufruf einfach das HTML anzeigen…

Was meinst Du?

Danke und Gruss
Andrea

Hallo Andrea,

Is (für mich) garnicht so einfach.
Jepp für mich ja auch nicht ;o)

Da bin ich ja beruhigt.

Erste Idee: man übergebe an eine function die einzelnen
Sprachelemente und prüfe gegen den Parameter „Language“.

Fällt leider weg, da ich das Xml direkt anziehen möchte (so in
der Art:
http://www.meinserver.com/haendler.xml?language=english.

Das ist kein Widerspruch. Im XSLT kannst du javascript „wie in html“ einbauen soviel du willst. Also XSLT parst das XML und dann habe ich eine html Seite, die dann abgearbeitet wird. Mit einem "

auch Inhalte des xml an eine function weiterleiten. In diesem Fall macht die function was mit dem übegebenen Wert und dann ein document.write(wert).

Leider ist es mir mit der Funktionalität nicht gelungen den
Sprachparameter im XSL wieder auszulesen. Er erkennt zwar,
dass ein Parameter da ist, weiss aber nicht, was für einer.
*ärger*

Im XSLT kenne ich auch keine Funktionalität dazu aber: javascript kann das ja machen! (siehe oben)

Eigentlich gute Idee, kann ich XMLs in andere importieren?
Dann könnte ich einfach die sprachabhängigen Tags in
unterschiedlichen XMLs verarbeiten und den Rest importieren.

ja:
http://www.wer-weiss-was.de/cgi-bin/forum/showarchiv…
Aber: der Aufruf muß immer noch „steuern“.

Du meinst das XML immer in Runtime durch die Transformation
jagen? Wollte ich eigentlich aus Performancegründen vermeiden.

Warum nicht, transformation ist ja in jedem Fall notwendig! Außerdem kann dann ein XmlControl „auf dem Server“ laufen, besser für den Client(?). Änderungen an der XML Struktur/Inhalten kann man so auch leichter einbauen. Über c# (auch andere?) kann man Parameter oder gar Objekte an die Transformation hängen. stellenweise benutzen wir ein Objekt, das über einen Dienst Übersetzungen macht, für die Darstellung von XML Daten.

Einfacher ist es vielleicht die XML on Demand zu generieren
und dann direkt die richtige Sprache einzubauen.

Nach unserer Erfahrung ist die Aufbereitung on Demand (Server-Seitig) in aller Regel unkritisch (wer macht da schon wirklich komplexe Dinge?)
Falls in deinem Fall die eigentliche Datenpflege und Haltung eh aus einer DB kommt ist damit auch sichergestellt, das du immer aktuelle daten hast. Filter, Sortierungen oder ähnliches kann eine DB eh besser!

Auch hier stört mich eigentlich das on Demand. Eine
Möglichkeit wäre jedoch die XMLs beim Erstgebrauch zu
übersetzen und danach als HTML abzuspeichern.

Also transformeiren und ablegen? Klingt nicht sehr dynamisch!

Danach könnte
ich beim nächsten Aufruf einfach das HTML anzeigen…

Ich habe für einen ähnlichen Fall mehrer XMLs erzeugt, die ich je nach Sprache anziehe. ggfs. kleines Script in die rufende Seite um die richtige Sprachversion auszuwählen (name+lang+".xml") oder so.
(Bei einem XML Control natürlich per c# sehr einfach einzubauen)

Hoffe das hilft und verwirrt nicht unnötig. Du solltest dir mal die Gesamtstruktur vorstellen und dann entscheiden. Wir legen unsere Daten idR in DBs ab und stellen uns die für die Anzeige zusammen. Darstellung je nach Bedarf über DataGrids, XML Masken oder einfache „texte“ oder …? .

Entscheidend ist für mich die Frage der Datenpflege: Auch im Web? In einer DB? Oder direkt in XML?

mfg Dirk