XSQL und XSL: Wert übergeben
Sven
- xml
0 Thomas J.S.0 Sven0 Sven0 Thomas J.S.0 Sven
Hallo,
ich arbeite mich gerade ganz frisch in XSQL und XSL ein und muss eine Abgabe machen. Es geht um die Verwaltung von Visitenkarten.
Szenario:
Ich möchte zur Auswahl geben, ob jemand Informationen über eine Firma, über einen Angestellten oder über beides haben möchte. Es gibt eine Oracle 10g Datenbank, in der eine Art Kontaktkatalog abgelegt ist. So kann man über Firmen an Kontaktpersonen oder über Kontaktpersonen an die Firmen kommen.
Nun habe ich auf einer Seite drei Formulare. Zwei mit je einer Drop-Down-Liste. Einmal mit Firmen, einmal mit Kontaktpersonen. Und je ein Submit-Button. Man soll so eine Auswahl treffen, über wen man weitere Informationen (Visitenkarte) wünscht.
Weiter soll es möglich sein, sich alle Visitenkarten anzeigen zu lassen. Daher gibt es noch einmal einen input mit type=hidden zusammen mit einem Submit-Button, der "Alle Visitenkarten" entspricht.
Der Submit geht immer an eine XSQL-Seite. Der eingeloggte Benutzer hat eine Datenbankview. Auf der XSQL-Seite würde ich gerne folgendes situationsabhängig hinbekommen:
Im Fall einer Auswahl einer Kontaktperson die query:
SELECT * FROM {@USER_VIEW} WHERE kontakt_id = {@kontakt_id}
Im Fall einer Auswahl einer Firma die query:
SELECT * FROM {@USER_VIEW} WHERE firmen_id = {@firmen_id}
Im Fall einer Auswahl des Buttons für alles die query:
SELECT * FROM {@USER_VIEW}
Da ich hier keine Lösung gefunden habe, wollte ich folgendes probieren:
Wenn auch nicht schön, wollte ich immer ein
SELECT * FROM {@USER_VIEW}
machen und dann im XSL eine Darstellung in Abhängigkeit des übergebenen Wertes machen.
Bsp. "Alle" mit Formular:
<form action="show_contacts.xsql">
<input type="hidden" name="alle" value="show" />
<input type="submit" value=" Alle Kontakte anzeigen " />
</form>
Ich habe dann eine Abfrage folgender Form versucht:
xsl:choose
<xsl:when test="@alle !=''">
...
</xsl:when>
</xsl:choose>
Zwei Probleme: Erstens klappt bei mir das Ungleich glaube ich nicht und zweitens weiß ich nicht, wie ich wen mit der URL "....?alle=show" übergebenen Wert auswerte.
Für Hilfe bin ich sehr dankbar. Ich habe auch schon wirklich lange gegoogelt... :-)
Grüße
Sven
Hallo,
ich arbeite mich gerade ganz frisch in XSQL und XSL ein
http://www.amazon.de/exec/obidos/ASIN/0471271209/
(die Seite http://www.oracle.com/oramag/oracle/01-jan/o11xml.html hast du sicher gelesen)
machen und dann im XSL eine Darstellung in Abhängigkeit des übergebenen Wertes machen.
Bsp. "Alle" mit Formular:
<form action="show_contacts.xsql">
<input type="hidden" name="alle" value="show" />
<input type="submit" value=" Alle Kontakte anzeigen " />
</form>
Ich habe dann eine Abfrage folgender Form versucht:
xsl:choose
<xsl:when test="@alle !=''">
...
</xsl:when>
</xsl:choose>
Zwei Probleme: Erstens klappt bei mir das Ungleich glaube ich nicht
Da im XSLT das @ ein Attribut bezeichnet, testest du in deiner Abfrage ob das Attribut "alle" des aktuellen Elements nicht leer ist.
und zweitens weiß ich nicht, wie ich wen mit der URL "....?alle=show" übergebenen Wert auswerte.
Wenn "alle" ein URL-Parameter ist und der XSLT-Prozessor URL-Params auswerten kann, solltest du "alle" auch als Parameter in deinem XSLT deklarieren (die "Auswertung" macht der Prozessor selbst)
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:param name="alle" />
...
xsl:choose
<xsl:when test="$alle = 'show'"> ... </xsl:when>
xsl:otherwise...</xsl:otherwise>
</xsl:choose>
logischer wäre allerdings ein URL "....?show=alle" etc.
Grüße
Thomas
Hallo Thomas,
vielen Dank für die Antwort.
Ich mache das im Rahmen einer Vorlesung. Daher fehlt bei mir das schrittweise Anlernen, sondern ich bin aus zeitlichen Gründen etwas dazu genötigt mitten drin einzusteigen und mir die benötigten Informationen zusammen zu suchen. Ich habe nämlich absolut kein Vorwissen zu XML, XSQL, XSL etc.
1.:
Stimmt, meine Bezeichnung ist etwas komisch: show=alle klingt irgendwie sinnvoller :-)
2.:
<xsl:param name="alle" />
Hatte gedacht, dass ich damit den bestehenden Wert überschreibe wenn ich den Parameter "neu" deklariere.
Ich kann es leider erst ausprobieren, wenn ich in den nächsten Tagen wieder zur Uni fahre.
Nochmal vielen Dank
Sven
Hallo,
2.:
<xsl:param name="alle" />
Hatte gedacht, dass ich damit den bestehenden Wert überschreibe wenn ich den Parameter "neu" deklariere.
Damit deklarierst du den Paramter erst als solches, damit er dem XSLT überhaupt bekannt ist.
Grüße
Thomas
Also ich habe es jetzt probiert, aber leider ohne Erfolg :-(
Ich habe drei Formulare in choose.xsl
<form action="show_contacts.xsql">
<input type="hidden" name="show" value="alle" />
<input type="submit" value=" Alle Kontakte anzeigen " />
</form>
<form action="show_contacts.xsql">
<select name="firma" size="1" style="width:250px;">
<xsl:for-each select="auswahl_firmen/row">
<option>
<xsl:attribute name="value">
<xsl:value-of select="id_firma"/>
</xsl:attribute>
<xsl:value-of select="firmenname"/>
</option>
</xsl:for-each>
</select>
<input type="submit" value=" Weiter " style="margin-top:5px;" />
</form>
und
<form action="show_contacts.xsql">
<select name="firma" size="1" style="width:250px;">
<xsl:for-each select="auswahl_personen/row">
<option>
<xsl:attribute name="value">
<xsl:value-of select="id_mitarbeiter"/>
</xsl:attribute>
<xsl:value-of select="vorname"/>, <xsl:value-of select="name"/>
</option>
</xsl:for-each>
</select>
<input type="submit" value=" Weiter " style="margin-top:5px;" />
</form>
In show_contacts.xsl steht:
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<!-- Root template -->
<xsl:param name="show" />
<xsl:param name="firma" />
<xsl:param name="person" />
<xsl:template match="/">
...<xsl:apply-templates />...
</xsl:template>
<xsl:template match="page">
...
xsl:choose
<xsl:when test="$show = 'alle'">
Alle
</xsl:when>
<xsl:when test="$firma != ''">
<xsl:value-of select="$firma" />
</xsl:when>
<xsl:when test="$person != ''">
<xsl:value-of select="$person" />
</xsl:when>
xsl:otherwise
Nix
</xsl:otherwise>
</xsl:choose>
...
</xsl:template>
</xsl:stylesheet>
Egal welches Formular ich wähle, ich habe zwar eine URL vom Typ [...]show_contacts.xsql?person=3, doch ausgegeben wird immer nur "Nix".
Wenn ich testweise in show_contacts.xsl am Anfang <xsl:param name="firma" select="'2'"/> schreibe, dann wird auch 2 ausgegeben.
Was ich also nur noch wissen muss ist, wie die Attribute den Wert aus der URL bekommen ;-)
Ich hoffe, noch Hilfe zu bekommen :-)
Vielen Dank schon einmal
Sven
Hallo,
Also ich habe es jetzt probiert, aber leider ohne Erfolg :-(
Egal welches Formular ich wähle, ich habe zwar eine URL vom Typ [...]show_contacts.xsql?person=3, doch ausgegeben wird immer nur "Nix".
Wenn ich testweise in show_contacts.xsl am Anfang <xsl:param name="firma" select="'2'"/> schreibe, dann wird auch 2 ausgegeben.
Was ich also nur noch wissen muss ist, wie die Attribute den Wert aus der URL bekommen ;-)
Es sieht ganz so aus, als ob der XSLT-Prozessor die Werte nicht übermittel bekommt.
Ich weiss nicht wie du die *.xsql-Datein ausführst. Vielleicht ein Servlet?
Darin muss du wohl noch dafür sorgen, dass die Paramter übergeben werden
xsql:include-param oder xsql:insert-param.
http://docs.openlinksw.com/virtuoso/xsql.html
Viel mehr kann ich dir dabei leider nicht helfen.
Grüße
Thomas
Hallo Thomas,
ES FUNKTIONIERT :-)
Welch Freude *gg*
Nachem ich set-stylesheet-param in meiner XSQL-Seite ergänzt habe, funktioniert es.
<page xmlns:xsql="urn:oracle-xsql" connection="{@connection}">
<xsql:set-stylesheet-param name="show" value="{@show}" />
<xsql:set-stylesheet-param name="firma" value="{@firma}" />
<xsql:set-stylesheet-param name="person" value="{@person}" />
[...]
</page>
Vielen Dank für all die Hilfe und dass du mich in die richtige Richtung geleitet hast!!!
Grüße und ewige Dankbarkeit
Sven