Parameterabfrage sinnvoll gestalten
hh
- xsl
0 Thomas J.S.0 Thomas Meinike0 hh0 Thomas Meinike0 Thomas J.S.0 hh
Hi,
ich mal wieder mit einem etwas verzwicktem Problem. Da ich eine xsl Auswertung machen möchte, ohne die xml Datein zu verändern, muesste ich nun serverseitig es lösen, dass ich dem xsl stylsheet Paramter zuweise. Die Zuweisung dürfte kein Problem darstellen und denken, dass ich das schaffe, allerdings überlege ich es jetzt, wie ich es am duemmsten anstelle, dass meine aufgabe erfüllt wird. Dazu folgendes Beispiel:
xml-Datei
<?xml version="1.0"?>
<root>
<hosen book="KOR-001-01">6000</hosen>
<hosen book="KOR-001-02">3000</hosen>
<hosen book="KOR-001-03">2000</hosen>
<hosen book="KOR-002-01">6000</hosen>
<hosen book="KOR-002-02">3000</hosen>
<hosen book="KOR-002-03">2000</hosen>
<taschen book="KOR-002-01">1500</taschen>
<taschen book="KOR-002-02">1800</taschen>
<mantel book="KOR-001-01">700</mantel>
<mantel book="KOR-001-02">500</mantel>
<mantel book="KOR-001-03">900</mantel>
<mantel book="KOR-003-01">300</mantel>
<mantel book="KOR-003-02">500</mantel>
<mantel book="KOR-003-03">800</mantel>
<mantel book="KOR-003-04">1000</mantel>
</root>
Nun möchte ich eine Auswertung starten, das book Attribut kann dabei nur nicht alle Werte zur gleichen Zeit annehmen es ist also nicht möglich, das KOR-001-01 und KOR-001-02 und KOR-001-03 gleichzeit ausgewählt werden, sonder nur ein Wert, z.B. KOR-001-01. Es kann aber sein, dass zusätzlich noch KOR-002-2 und KOR-003-03 ausgewählt sind. Es ist aber wiederum nicht möglich das innnerhalb von bspw. KOR-003 zwei Unterwerte ausgewählt sind, sondern immer nur ein Unterwert von KOR-003-XX.
So und wie stelle ich nun meine Auswertung an, ich hatte mir überlegt, es eventuell so zu lösen.
<?xml version="1.0"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:param name="KOR-001" select="'KOR-001-02'"/>
<xsl:param name="KOR-002" select="'KOR-002-02'"/>
<xsl:param name="KOR-003" select="'KOR-003-01'"/>
<xsl:template match="/">
<xsl:value-of select="sum(/*/hosen[@book=$KOR-001 or @book=$KOR-002 or @book=$KOR-003])"/>
<xsl:value-of select="sum(/*/mantel[@book=$KOR-001 or @book=$KOR-002 or @book=$KOR-003])"/>
<xsl:value-of select="sum(/*/taschen[@book=$KOR-001 or @book=$KOR-002 or @book=$KOR-003])"/>
</xsl:template>
</xsl:stylesheet>
Allerdings hat dies den Nachteil, dass ich die Attributebedingung immer wieder noch erweitern muss, wenn ich z.B. noch ein KOR-004-XX bzw. KOR-005-XX hinzufügen möchte. Ich hoffe, mein Beispiel ist etwas verständlich. Kann man vielleicht irgendwie die Attributebedingung so setzen, dass alle paramter, die mit KOR anfang automatisch geprüft werden?
Mir wäre es auch möglich, die Parameter anders zu benennen, nur ich weiss nicht recht wie. Wie gesagt, ich möchte das ganze so lösen, dass ich nichts zurück in meine xml serverseitig schreiben muss (da haette ich bereits die Lösung).
Hallo,
Nun möchte ich eine Auswertung starten, das book Attribut kann dabei nur nicht alle Werte zur gleichen Zeit annehmen es ist also nicht möglich, das KOR-001-01 und KOR-001-02 und KOR-001-03 gleichzeit ausgewählt werden, sonder nur ein Wert, z.B. KOR-001-01. Es kann aber sein, dass zusätzlich noch KOR-002-2 und KOR-003-03 ausgewählt sind. Es ist aber wiederum nicht möglich das innnerhalb von bspw. KOR-003 zwei Unterwerte ausgewählt sind, sondern immer nur ein Unterwert von KOR-003-XX.
Also es kann zur selben Zeit z.B. KOR-001-01, KOR-002-01 und KOR-003-02 ausgewählt werden aber nicht KOR-001-01 und KOR-001-02. (?)
So und wie stelle ich nun meine Auswertung an, ich hatte mir überlegt, es eventuell so zu lösen.
<?xml version="1.0"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:param name="KOR-001" select="'KOR-001-02'"/>
<xsl:param name="KOR-002" select="'KOR-002-02'"/>
<xsl:param name="KOR-003" select="'KOR-003-01'"/>
Das ist keine besonsers gute Lösung, aber das weiss du ja bereits.
Kann man vielleicht irgendwie die Attributebedingung so setzen, dass alle paramter, die mit KOR anfang automatisch geprüft werden?
Schon, aber das halte ich für ungeignet, weil dann du eben alle Wert bekommst.
Mir wäre es auch möglich, die Parameter anders zu benennen, nur ich weiss nicht recht wie. Wie gesagt, ich möchte das ganze so lösen, dass ich nichts zurück in meine xml serverseitig schreiben muss (da haette ich bereits die Lösung).
Du kannst in einem Parameter alle ausgewählte Werte übergebe:
&KOR=KOR-001-01,KOR-002-01,KOR-003-01
dann in einem rekursiven Template die Werte auseinander nehmen und sie einzeln überprüfen.
Grüße
Thomas
Hallo,
Kann man vielleicht irgendwie die Attributebedingung so setzen, dass alle paramter, die mit KOR anfang automatisch geprüft werden?
Hilft Dir das weiter?
<?xml version="1.0"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:param name="KOR" select="'KOR-001-02|KOR-002-02|KOR-003-01'"/>
<xsl:template match="/">
<xsl:value-of select="sum(/*/hosen[contains($KOR,@book)])"/>
<xsl:value-of select="sum(/*/mantel[contains($KOR,@book)])"/>
<xsl:value-of select="sum(/*/taschen[contains($KOR,@book)])"/>
</xsl:template>
</xsl:stylesheet>
Der Parameter $KOR koennte dann je nach Anforderung serverseitig erzeugt und an das Stylesheet uebergeben werden.
MfG, Thomas
Junge,
ich bastle hier den ganzen Tag an meinem rekursive Template, habe es endlich fertig - und dann kommst du daher mit den läppigen 3 Code-Zeilen, die genau meinen Zweck erfüllen, nach dem ich gesucht habe. Das Leben ist echt deprimierend für mich, aber trotzdem - Besten Dank für den Hinweis - funktioniert sehr gut, soweit ich es getestet habe ;-)
PS: Wie lang kann eigentlich der Inhalt von Parameter KOR werden? Gibt es da irgendwo eine Zeichenbegrenzung?
Tipp»» Hallo,
Kann man vielleicht irgendwie die Attributebedingung so setzen, dass alle paramter, die mit KOR anfang automatisch geprüft werden?
Hilft Dir das weiter?
<?xml version="1.0"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:param name="KOR" select="'KOR-001-02|KOR-002-02|KOR-003-01'"/>
<xsl:template match="/">
<xsl:value-of select="sum(//hosen[contains($KOR,@book)])"/>
<xsl:value-of select="sum(//mantel[contains($KOR,@book)])"/>
<xsl:value-of select="sum(/*/taschen[contains($KOR,@book)])"/>
</xsl:template>
</xsl:stylesheet>
>
> Der Parameter $KOR koennte dann je nach Anforderung serverseitig erzeugt und an das Stylesheet uebergeben werden.
>
> MfG, Thomas
>
Hallo,
PS: Wie lang kann eigentlich der Inhalt von Parameter KOR werden? Gibt es da irgendwo eine Zeichenbegrenzung?
AFAIK keine lt. Spezifikation, zumal auch <xsl:param>(Vorlage)</xsl:param>
moeglich ist.
Limits liegen ggf. bei den Prozessoren und der Speicherausstattung. Zumindest habe ich noch keine Probleme in dieser Richtung gehabt. XSL & Co werden ja oft zur Verarbeitung großer Datenmengen eingesetzt.
MfG, Thomas
Hallo Thomas,
PS: Wie lang kann eigentlich der Inhalt von Parameter KOR werden? Gibt es da irgendwo eine Zeichenbegrenzung?
AFAIK keine lt. Spezifikation, zumal auch
<xsl:param>(Vorlage)</xsl:param>
moeglich ist.Limits liegen ggf. bei den Prozessoren und der Speicherausstattung. Zumindest habe ich noch keine Probleme in dieser Richtung gehabt. XSL & Co werden ja oft zur Verarbeitung großer Datenmengen eingesetzt.
Nur als kleine Ergänzung:
Probleme könnte es nur dann geben, wenn der Parameter als URL-Parameter übergeben wird, denn obwohl HTTP 1.1 keine Begrenzung für die maximale URL-Länge vorgibt, liegt diese bei 2,083 Zeichen in Internet Explorer (bis inkl. 5.5).
Grüße
Thomas
Hallo Thomas,
danke für die Antwort, das hatte ich mir fast gedacht und habe deshalb gleich Listenfelder zur Übergabe gewählt, die ich dann serverseitig mit Request.Form() abfrage und nicht per Request.QueryString() aus der URL lese. Puh, ich hoffe ich behalte den Überblick ;-) aber jetzt bin ich erst einmal die größten Probleme los. Obwohl, ich muesste ja noch die asp schreiben, aber das kann ich erst machen, wenn mein xsl stylesheet fertig ist - und bis dahin muss ich noch viel tippen;-)
Viele Grüße,
Holger
Hallo Thomas,
PS: Wie lang kann eigentlich der Inhalt von Parameter KOR werden? Gibt es da irgendwo eine Zeichenbegrenzung?
AFAIK keine lt. Spezifikation, zumal auch
<xsl:param>(Vorlage)</xsl:param>
moeglich ist.Limits liegen ggf. bei den Prozessoren und der Speicherausstattung. Zumindest habe ich noch keine Probleme in dieser Richtung gehabt. XSL & Co werden ja oft zur Verarbeitung großer Datenmengen eingesetzt.
Nur als kleine Ergänzung:
Probleme könnte es nur dann geben, wenn der Parameter als URL-Parameter übergeben wird, denn obwohl HTTP 1.1 keine Begrenzung für die maximale URL-Länge vorgibt, liegt diese bei 2,083 Zeichen in Internet Explorer (bis inkl. 5.5).Grüße
Thomas