beim Umbau meiner Website stehe ich vor folgender Herausforderung: Ich habe eine XML-Datei, in der Information abgelegt sind. Mit einer XSL-Stylesheet-Transformation werden bestimmte Informationen entnommen und im Webbrowser angezeigt, basierend auf Kategorie und Sprache des Inhalts in der XML-Datei (Kategorieren sind normale XML-Tags, die Sprache wird mit dem Attribut xml:lang angegeben). Im Moment gibt es insgesamt 8 Kombinationen aus Kategorie (4) und Sprache (2).
Ich suche nun nach einer Methode, um das zu verwendende Stylesheet dynamisch zuzuweisen, je nachdem, woher der Benutzer kommt. Soll heissen, der Benutzer klickt auf einen bestimmten Link (von 8 verschiedenen) und die XML-Datei wird mit einem bestimmten Stylesheet (von 8) geöffnet, welches die Inhalte der XML-Datei mit einer bestimmten Kategorie in einer bestimmten Sprache anzeigt.
Ist dies ueberhaupt moeglich? Wichtig waere mir, dass ich nur eine XML-Datei als Basis fuer die Inhalte habe. Am liebsten waere mir, wenn ich nur eine XSL-Datei verwenden muesste, aber das wird wohl eher nicht gehen.
zuerst: wieso ist diese newsgroup so notorisch unterfrequentiert?
zu deinem problem:
so weit ich dich verstanden habe rate ich dir das was du vor hast tatsächlich mit nur einem xslt zu lösen.
deine bisheriges xslt:
Mit einer XSL-Stylesheet-Transformation werden
bestimmte Informationen entnommen und im Webbrowser angezeigt,
basierend auf Kategorie und Sprache des Inhalts in der
XML-Datei (Kategorieren sind normale XML-Tags, die Sprache
wird mit dem Attribut xml:lang angegeben). Im Moment gibt es
insgesamt 8 Kombinationen aus Kategorie (4) und Sprache (2).
kannst du doch so umbauen, dass du im template-root-match kategorie und sprache den anderen als parameter ($category / $language) übergibst.
leider bin ich kein html/javascript etc. experte, und habe keine ahnung, wie du übr den link deine xslt-transformation startest…aber da sollte sich jemandes oder eine www-quelle finden, wie man sowas machen kann (da hat es sicher 1001 möglichkeit…).
zuerst: wieso ist diese newsgroup so notorisch
unterfrequentiert?
Tja, gute Frage. Ich habe mich schon gewundert, ob hier denn ueberhaupt jemand mitliest…
Mit einer XSL-Stylesheet-Transformation werden
bestimmte Informationen entnommen und im Webbrowser angezeigt,
basierend auf Kategorie und Sprache des Inhalts in der
XML-Datei (Kategorieren sind normale XML-Tags, die Sprache
wird mit dem Attribut xml:lang angegeben). Im Moment gibt es
insgesamt 8 Kombinationen aus Kategorie (4) und Sprache (2).
kannst du doch so umbauen, dass du im template-root-match
kategorie und sprache den anderen
als parameter ($category / $language) übergibst.
Irgendwie muss ich aber festlegen, welche Kategorie in welcher Sprach denn nun aus der XML-Datei herausgefischt werden soll, oder?
leider bin ich kein html/javascript etc. experte, und habe
keine ahnung, wie du übr den link deine xslt-transformation
startest…aber da sollte sich jemandes oder eine www-quelle
finden, wie man sowas machen kann (da hat es sicher 1001
möglichkeit…).
Vielleicht. Inzwischen denke ich mir, dass eine PHP/MySQL-Loesung vielleicht einfacher umzusetzen waere…Irgendwie wirkt es aber wie Overkill hierfuer einen Datenbank einzusetzen.
Tja, gute Frage. Ich habe mich schon gewundert, ob hier denn
ueberhaupt jemand mitliest…
ja, u.a. deswegen habe ich dir geantwortet obwohl ic nicht 100%ig kompetent bin für dein problem (xml/xslt schon, dyn. web-sitzes nicht…)
Im Moment gibt es
insgesamt 8 Kombinationen aus Kategorie (4) und Sprache (2).
kannst du doch so umbauen, dass du im template-root-match
kategorie und sprache den anderen
als parameter ($category / $language) übergibst.
Irgendwie muss ich aber festlegen, welche Kategorie in welcher
Sprach denn nun aus der XML-Datei herausgefischt werden soll,
oder?
ja, daher hier meine frage:
leider bin ich kein html/javascript etc. experte, und habe
keine ahnung, wie du übr den link deine xslt-transformation
startest…
die frage ist, ob du als link eine js aufruf starten kannst oder etwas anders, was an dein xslt die beiden eigenschaften als parameter übergibt.* ich bin sicher, dass dies ‚irgendwie‘ geht. wahrscheinlich gibts da schon was bei javascript-heinz - oder bei obi - will sagen: das problem ist nicht so selten.
*mir ist aber nicht klar, woher du diese eigenschaften ‚dynamisch‘ beziehst, aus den browser-info?
Vielleicht. Inzwischen denke ich mir, dass eine
PHP/MySQL-Loesung vielleicht einfacher umzusetzen
waere…Irgendwie wirkt es aber wie Overkill hierfuer einen
Datenbank einzusetzen.
genau, und eigtl. ist xml selbst ja auch nix anderes als eine db.
Ich verwende zu diesem Zwecke aspx Seiten (c#). Diesen übergebe ich als Parameter zB die Sprache, Werte diese Parameter aus und nehme halt die Daten die ich brauche. Ob es in anderen Sprachen (PHP?) ähnliche Methoden gibt kann ich nicht sagen.
Prinzip:
switch(Request.Params[„language“])
{
case „deu“: xmlFile = „deutsch.xml“;
break;
case „eng“: xmlFile = „eglisch.xml“;
break;
}
// analog das Stylesheet aussuchen
switch(Request.Params[„style“])
{
case „klein“: xsltFile = „klein.xslt“;
break;
case „mittel“: xsltFile = „mittel.xslt“;
break;
}
//Dann „parsen“:
//(in der apsx seite habe ich ein asp:stuck_out_tongue:anel allXmlStreams,
//in das ich den „stream“ schreib)
Da das sehr spezifisch sein kann, ist das nur das Prinzip und so nicht getestet. Entscheidend ist, das auf dem Server die Daten geparst werden. Dazu braucht man soetwas wie „Transform“
Solltest du c# einsetzen können, helfe ich gerne mit einem richtigen Beispiel aus!
P.S.: Die mangelnde !Aufmerksamkeit" im XML Bereich bedauere ich auch!
Danke fuer den Tipp, Stefan! Von asp/C# hab ich ja nun ueberhaupt keine Ahnung. Dann eher JSP. Ich werde mich wohl fuer die uebliche php/mysql-Loesung entscheidung. Duerfte so schwer nicht sein.