Du verwendest einen veralteten Browser. Es ist möglich, dass diese oder andere Websites nicht korrekt angezeigt werden. Du solltest ein Upgrade durchführen oder ein alternativer Browser verwenden.
Also Du hast einen Link zur Lösung ja schon gepostet. Und wir hatten vor Kurzem ja schon einen Thread bezüglich Transformationen, bei dem ich wohl auch Links zu Tutorials gepostet habe. (Wenn nicht: Google bringt da ja sehr viele Treffer.)
Woran scheitert es? Was verstehst Du bei der Problematik bzw. bei der angebotenen Lösung auf der Webseite nicht? Ich sehe im Augenblick keinen Ansatzpunkt, um Dir wirklich effektiv mit Erläuterungen weiter zu helfen.
Ich habe mal einfach ein paar Dinge in der Lösung von dem Thread angepasst und einige Zwischenschritte mit ausgegeben, so dass Du es vielleicht leichter hast, die Lösung nachzuvollziehen.
Also der Aufbau ist generell ganz einfach:
- Globales template (match="/") - Dort habe ich mal einfach ein root Element "result" eingefügt - das kannst Du aber auch raus nehmen. Wichtig ist hier nur, dass wir jetzt das Property Element auswerten wollen. Also sozusagen der Aufruf für das Property Element.
- Property template - Hier wird einfach nur das splitLinks (Name habe ich aus Deinem Link einfach beibehalten. Sollte man noch umbenennen) aufgerufen. Als Parameter wird der Inhalt von PropertyValue übergeben.
- splitLinks template. Dieses wird ja aufgerufen. Damit deutlich wird, was da passiert, gebe ich einfach einmal ein paar Informationen aus. In Call schreibe ich den Parameter und dann gebe ich noch in Count die Anzahl der Separatoren an. (Bei der Lösung ist wichtig, dass in einem String NIE der Separator vorkommt. Das wäre hier fatal.)
- splitLinks ist einfach eine Rekursion. Bei 0 Separatoren wird der Inhalt direkt ausgegeben. Bei mindestens einem Separator, wird der String vor dem Separator ausgegeben und dann splitLinks rekursiv aufgerufen mit dem Text nach dem Separator.
- Die Ausgabe würde hier noch die ' und auch die [ und ] beinhalten. Die schneide ich einfach ab indem ich nur den Text nach und vor dem ' (&apos) ausgebe. Das habe ich hier einfach mit Hilfvariablen t1, t2 und t3 gemacht - das wäre nicht zwingend nötig. Und ich gebe diese Variablen in entsprechenden Elementen aus.
Zur Vereinfachung sollte man evt ein template Ausgabe erstellen, dass den Text als Parameter bekommt und dass dann die Entfernung der ' durchführt. Dann hat man den Code nicht doppelt. Aber das muss nicht sein. Man kann auch die selects alle ineinander veschachteln um nur einen Ausdruck zu erhalten. Das war jetzt halt nur aufgesplittet um Dir auch die Ergebnisse vor Augen zu führen.
vielen Dank für die ausführliche Antwort.
Im Laufe des gestrigen Tages war ich dann
auch alleine auf die Lösung gekommen.
Ein Problem habe ich jetzt noch.Die Einzulesende XML variert, das heißt
das Feld PropertyValue kann frei sein, oder 1-3 "COM" enthalten.
Angepasst daran sollen passend Items erstellt werden.
Das hast Du doch eigentlich in meinem Transform schon. Die ganzen Zusatzausgaben entfernen und ggf. noch ein eigenes template zum Wert anzeigen und schon ist man fertig.
Einziges Problem: Deine Vorgabe ist kein gültiges XML - Du brauchst genau ein root Element. Das habe ich einfach einmal hinzugefügt als "items" (Properties wäre evtl. besser gewesen, aber ich habe es nicht noch einmal angepasst.):
Dann das xslt angepasst:
- im globalen Match muss dann der Ausdruck für die Property Elemente geändert werden. Das ist nun halt nicht mehr Property sondern items/Property
- Die Debug-Ausgaben entfernt
- das template ShowValues eingefügt, damit der Code zum Entfernen der Zeichen bis einschließlich des ' und danach ab dem ' nur noch an einer Stelle zu finden sind.
- template für den Split noch umbenannt (SplitValues statt SplitLinks)
Und damit haben wir dann folgendes xslt: