mediengestalter.info
FAQ :: Mitgliederliste :: MGi Team

Willkommen auf dem Portal für Mediengestalter

Aktuelles Datum und Uhrzeit: Di 23.04.2024 15:32 Benutzername: Passwort: Auto-Login

Thema: Ärger mit apply-templates vom 16.01.2008


Neues Thema eröffnen   Neue Antwort erstellen MGi Foren-Übersicht -> Programmierung -> Ärger mit apply-templates
Seite: 1, 2  Weiter
Autor Nachricht
sousterrainian
Threadersteller

Dabei seit: 12.12.2007
Ort: Bremen
Alter: 42
Geschlecht: Männlich
Verfasst Mi 16.01.2008 17:46
Titel

Ärger mit apply-templates

Antworten mit Zitat Zum Seitenanfang

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 * Ich geb auf... * 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
  View user's profile Private Nachricht senden
pixelpapst303

Dabei seit: 06.07.2006
Ort: hamburg
Alter: 50
Geschlecht: Männlich
Verfasst Mi 16.01.2008 18:03
Titel

Antworten mit Zitat Zum Seitenanfang

kannst du mal das entsprechende xml-file posten?
  View user's profile Private Nachricht senden Website dieses Benutzers besuchen
Anzeige
Anzeige
Zeithase

Dabei seit: 09.05.2005
Ort: Erfurt
Alter: 39
Geschlecht: Männlich
Verfasst Mi 16.01.2008 18:31
Titel

Antworten mit Zitat Zum Seitenanfang

Aeh? Was sollen denn Dollar-Zeichen, @ und Slashes bei dem select-Value? Mir deucht, Du moechtest mal hier hin.
  View user's profile Private Nachricht senden
pixelpapst303

Dabei seit: 06.07.2006
Ort: hamburg
Alter: 50
Geschlecht: Männlich
Verfasst Mi 16.01.2008 18:35
Titel

Antworten mit Zitat Zum Seitenanfang

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
  View user's profile Private Nachricht senden Website dieses Benutzers besuchen
sousterrainian
Threadersteller

Dabei seit: 12.12.2007
Ort: Bremen
Alter: 42
Geschlecht: Männlich
Verfasst Do 17.01.2008 01:47
Titel

Antworten mit Zitat Zum Seitenanfang

@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* *zwinker*

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
  View user's profile Private Nachricht senden
sousterrainian
Threadersteller

Dabei seit: 12.12.2007
Ort: Bremen
Alter: 42
Geschlecht: Männlich
Verfasst Do 17.01.2008 11:02
Titel

Antworten mit Zitat Zum Seitenanfang

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 * Keine Ahnung... *


Zuletzt bearbeitet von sousterrainian am Do 17.01.2008 11:54, insgesamt 2-mal bearbeitet
  View user's profile Private Nachricht senden
pixelpapst303

Dabei seit: 06.07.2006
Ort: hamburg
Alter: 50
Geschlecht: Männlich
Verfasst Do 17.01.2008 16:48
Titel

Antworten mit Zitat Zum Seitenanfang

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 *zwinker*

das war damals zumindest (vor ca. 2 jahren) n ziemlich gutes ding...


ps. lass dir von sonderbaren phänomenen nicht die anschauung verderben *zwinker*
was mir aufgefallen ist: vorher habt ihr das mistige xml? das schreit doch nach wilder hin- und herspringerei
  View user's profile Private Nachricht senden Website dieses Benutzers besuchen
sousterrainian
Threadersteller

Dabei seit: 12.12.2007
Ort: Bremen
Alter: 42
Geschlecht: Männlich
Verfasst Do 17.01.2008 17:36
Titel

Antworten mit Zitat Zum Seitenanfang

pixelpapst303 hat geschrieben:

ps. lass dir von sonderbaren phänomenen nicht die anschauung verderben *zwinker*


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. *zwinker*
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. *Huch*


Zuletzt bearbeitet von sousterrainian am Do 17.01.2008 17:39, insgesamt 1-mal bearbeitet
  View user's profile Private Nachricht senden
 
Ä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
Neues Thema eröffnen   Neue Antwort erstellen Seite: 1, 2  Weiter
MGi Foren-Übersicht -> Programmierung


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.