Willkommen auf dem Portal für Mediengestalter
|
|
Autor |
Nachricht |
sousterrainian
Threadersteller
Dabei seit: 12.12.2007
Ort: Bremen
Alter: 42
Geschlecht:
|
Verfasst Mi 16.01.2008 17:46
Titel Ärger mit apply-templates |
|
|
Tach auch,
ich prügel mich mal wieder mit xsl herum und habe ein Problem. Ich versuche aus einem Teil meines XML's einen Wert per xsl:with-param an ein template in einem anderen Baum zu übergeben. Da ich den neuen Knoten für eine Abfrage brauche, halt per xsl-apply-templates.
In meiner Referenz steht, dass es möglich ist Parameter mittels apply-templates und with-param an Templates zu übergeben, doch kommt nichts an, obwohl das Template aufgerufen und abgearbeitet wird. Auch google spuckt hierzu nichts brauchbares aus, außer, dass ich auf meiner Windows-Möhre auf "libxslt-1.0.3 and libxml2-2.4.3" upgraden soll Ok die Newsgroup, in der jemand exakt das Problem hatte, ist nicht für Windows-User gedacht...
Code: |
<?xml version="1.0"?>
<xsl:stylesheet version="1.0"><!-- auch mit 2.0 funzts net -->
<xsl:template name="blub">
<xsl:apply-templates select="/foo/bar">
<xsl:with-param name="blah" select="@blah">
<xsl:with-param name="blahblub">blahblub</xsl:with-param>
</xsl:apply-templates>
</xsl:template>
<xsl:template match="foobar">
<xsl:param name="blah"/>
<xsl:param name="blahblub"/>
<p>
<xsl:value-of select="$blah"/>
</p>
<p>
<xsl:value-of select="$blahblub"/>
</p>
</xsl:template>
|
Das Ergebnis: beide <p>-Tags sind leer. Es ist also kein Fehler in der Syntax für den Template-Aufruf, da die beiden <p>'s auch im HTML-Code auftauchen. Rufe ich die ganze chose über call-template auf, funktioniert es auch.
Ich hoffe, dass mir einer von euch weiterhelfen kann.
Gruß
Unterwelter
|
|
|
|
|
pixelpapst303
Dabei seit: 06.07.2006
Ort: hamburg
Alter: 50
Geschlecht:
|
Verfasst Mi 16.01.2008 18:03
Titel
|
|
|
kannst du mal das entsprechende xml-file posten?
|
|
|
|
|
Anzeige
|
|
|
Zeithase
Dabei seit: 09.05.2005
Ort: Erfurt
Alter: 39
Geschlecht:
|
Verfasst Mi 16.01.2008 18:31
Titel
|
|
|
Aeh? Was sollen denn Dollar-Zeichen, @ und Slashes bei dem select-Value? Mir deucht, Du moechtest mal hier hin.
|
|
|
|
|
pixelpapst303
Dabei seit: 06.07.2006
Ort: hamburg
Alter: 50
Geschlecht:
|
Verfasst Mi 16.01.2008 18:35
Titel
|
|
|
das $ sollte für den aufruf über apply-templates (edit: mit width-param) schon ok sein... mich dolcht eher, dass der aufbau etwas ungünstig ist.
so n banal-fehler ists doch hoffentlich nicht, oder:
Code: |
...
<xsl:apply-templates select="/foo/bar">
...
...
...
<xsl:template match="foobar">
...
...
...
|
??
Zuletzt bearbeitet von pixelpapst303 am Mi 16.01.2008 18:36, insgesamt 1-mal bearbeitet
|
|
|
|
|
sousterrainian
Threadersteller
Dabei seit: 12.12.2007
Ort: Bremen
Alter: 42
Geschlecht:
|
Verfasst Do 17.01.2008 01:47
Titel
|
|
|
@zeithase:
Führst du Selbstgespräche? Mich deucht so!
Stichworte:
DTD, Namespace, xml:variable, XPath...
Beispiel:
xml-knoten:
<abc:foo id="bar">
xsl:
<xsl:value-of select="abc:foo/@bar"/> -> kannst du dir vorstellen, was das macht?
@pixelpapst:
1. Danke für deine Beiträge! Und ja das $ ist sogar sehr konform.
2.
Zitat: | so n banal-fehler ists doch hoffentlich nicht, oder: |
Ne leider nicht. Ich habe da das Beispiel unverständlich aufgebaut. Wenn foobar ein Unterknoten von foo/bar ist, passt es leider, auch wenn der Aufruf zugegeben nicht soo sauber ist.
Also: *medkitrausholunddolchwundeheil*
3. Das XML kann ich hier nicht posten, da es 7! Namespaces aufruft, die im Schnitt bei 1000 Zeilen liegen. "Das" XML gibt es leider auch nicht, da das XSL auf verschiedenste generierte XML-Files passen muss. Außerdem könnte ich die mir in der Firma bleibenden Tage an einer Hand abzählen, wenn ich das mache...
4. Eigentlich wollte ich nur wissen, ob bereits jemand erfolgreich ein xsl:apply-templates erfolgreich mit einem übergebenen Parameter gebastelt hat, weil der Aufruf bei mir nichts übergibt. Exakt der gleiche Code mit call-template und vergebenem Namen funktioniert, wie hier geschildert:
Zitat: | Das Ergebnis: beide <p>-Tags sind leer. Es ist also kein Fehler in der Syntax für den Template-Aufruf, da die beiden <p>'s auch im HTML-Code auftauchen. Rufe ich die ganze chose über call-template auf, funktioniert es auch. |
5. Erst dachte ich, dass ich die Element-Id, die ich per with-param übergeben wollte leer ist, weil ich über apply-templates zum Zeitpunkt des Aufrufs bereits den Knoten gewechselt habe und er das Element nicht mehr findet. Leider ist auch das nicht das Problem, da auch "hart"-übergebene Parameter leer sind. (darum das blahblub)
6. Vielleicht hilft das:
Code: |
xml:
<abschnitt id="1">
<person id="a">
</abschnitt>
<abschnitt id="2">
<person id="b">B</person>
</abschnitt>
.
.
.
<zusatzinformationen>
<irgendwas>
<zeitpunkt id="a">dd.mm.yyyy</zeitpunkt>
</irgendwas>
<was_anderes>
<andere_info/>
</was_anderes>
<irgendwas>
<zeitpunkt id="b">dd.mm.yyyy</zeitpunkt>
</irgendwas>
<was_anderes>
<andere_info/>
</was_anderes>
.
.
.
</zusatzinformationen>
xsl:
<xsl-for-each select="abschnitt">
<div>
<p>
<xsl:value-of select="abschnitt/person"/>
</p>
<p>
<xsl:apply-templates select="zusatzinformationen">
<xsl:with-param name="check" select="person/@Id">
</xsl:apply-templates select="zusatzinformationen">
</p>
</div>
<xsl:for-each>
<xsl:template match="irgendwas">
<xsl:param name="check"/>
<xsl:for-each select="./zeitpunkt">
<xsl:if "@id=$check">
<xsl:value-of select="@id"/>
<xsl:value-of select="../was_anderes/andere_info"
</xsl:if>
</xsl:for-each>
</xsl:template>
|
ich glaub ich muss morgen/heute noch editen(ja ich weiß, dass die knoten noch falsch sind), jetzt bin ich echt zu fertig. Hoffe aber ihr versteht das Problem, warum ich über apply den Knoten wechseln muss. Die "andere_info" hat nämlich keinen identifier, gehört aber trotzdem zu einer person...
Gruß und gut Nacht
|
|
|
|
|
sousterrainian
Threadersteller
Dabei seit: 12.12.2007
Ort: Bremen
Alter: 42
Geschlecht:
|
Verfasst Do 17.01.2008 11:02
Titel
|
|
|
hmm... Eins weiß ich jetzt definitiv: es liegt am Dokument selbst. In einem Test habe ich gerade (mit de Codeschnipseln in minimal abgeändert) Parameter per apply übergeben können. Ich habe auch die gleichen Versionsangaben benutzt. Warum es im Original nicht funzt ist mir völligst unklar.
edit:
Ok, jetzt bricht meine Weltanschauung zusammen. Ich habe aus dem altova die XPath-angabe kopiert (1:1 die gleiche, wie die, die ich jebastelt habe), habs dann vailidiert - keine code-änderungen! Jetzt läufts. Wenn mir jemand Literatur empfehlen kann, in der Parsing etc. für XSL erläutert wird - HER DAMIT
Zuletzt bearbeitet von sousterrainian am Do 17.01.2008 11:54, insgesamt 2-mal bearbeitet
|
|
|
|
|
pixelpapst303
Dabei seit: 06.07.2006
Ort: hamburg
Alter: 50
Geschlecht:
|
Verfasst Do 17.01.2008 16:48
Titel
|
|
|
es gab vor jahren mal ein buch. aufm cover ein bärtiger xsl / xslt guru zu sehen. leider ist der name entfallen. habs leider auch nicht / stand in meiner alten firma rum. aber vielleicht kommt jemand drauf, oder du siehts n bärtigen aufm xslt-buch im laden
das war damals zumindest (vor ca. 2 jahren) n ziemlich gutes ding...
ps. lass dir von sonderbaren phänomenen nicht die anschauung verderben
was mir aufgefallen ist: vorher habt ihr das mistige xml? das schreit doch nach wilder hin- und herspringerei
|
|
|
|
|
sousterrainian
Threadersteller
Dabei seit: 12.12.2007
Ort: Bremen
Alter: 42
Geschlecht:
|
Verfasst Do 17.01.2008 17:36
Titel
|
|
|
pixelpapst303 hat geschrieben: |
ps. lass dir von sonderbaren phänomenen nicht die anschauung verderben
|
Da ich jetzt wieder schlafen darf - keine Newsgroups lesen bis morgens um 3 und dann um 6-8h aufstehen - denke ich wird das mit der Anschauung wieder.
pixelpapst303 hat geschrieben: |
was mir aufgefallen ist: vorher habt ihr das mistige xml? das schreit doch nach wilder hin- und herspringerei
|
die Frage verstehe ich nicht so ganz.
Die Struktur:
Da war ein Applet, dass anhand einer riesigen Datenbank mit Einträgen für mehrere Millionen Personen, für jede einzelne dieser Personen, ein XML-File generiert. Wir mussten jetzt dieses Applet, welches 1000den von Seiten Gesetzestext genügte, erweitern, damit spezielle andere Personen spezielle Rechte haben, die dann auch im XML hinterlegt sind. Das können pro Person X Rechteinhaber sein, deren Daten ausgegeben werden mussten. Auch können in einem XML mehrere Personen mit den verschiedensten rechteinhabern auftauchen. Ach ja Anhänge an den Dokumenten gibt es selbstverständlich in einigen Fällen auch...
Und ja in den knapp 1500 zeilen XSL rufe ich insgesamt knapp 20 verschiedene Templates auf und schmeiße mit XPath-Ausdrücken nur so um mich. Am besten waren die Rekursionen, die mir ein Kollege erklärt hat, ohne die man keine Laufvariablen erzeugen kann usw.
Das Applet wird übrigens von Rechteinhaber 1 aufgerufen und der Inhalt kann von Rechteinhaber 2 im Browser, als PDF oder als Mail betrachtet werden.
Das ganze in 4 Wochen und vorher hatte ich quasi keine Ahnung von XSL, wie ich jetzt weiß. Viel mehr habe ich immer noch nicht, aber immerhin etwas. Sobald man tiefer in eine Materie eintaucht merkt man, dass man eigentlich garnichts weiß, obwohl man, als man die ganze Sache noch von außen betrachtet hat, der Meinung war, man würde rallen, was so alles geht - Pustekuchen.
Cooler Nebeneffekt, ich konnte auch noch die ersten Einblicke in Java gewinnen.
Zuletzt bearbeitet von sousterrainian am Do 17.01.2008 17:39, insgesamt 1-mal bearbeitet
|
|
|
|
|
|
|
|
Ähnliche Themen |
css: 1 div, 2 spalten und ne menge ärger!
[golive CS] macht ärger, was tun ? :(
immer ärger mit diesem dreamweaver...
zwei div´s ein flashfilm und jede menge ärger
vb3 templates
PHP | Templates
|
|
|
Du kannst keine Beiträge in dieses Forum schreiben. Du kannst auf Beiträge in diesem Forum nicht antworten. Du kannst an Umfragen in diesem Forum nicht mitmachen.
|
|