Veröffentlicht 19. August 200916 j Hallo Jungs, meint ihr, dass mir jemand bei folgendem Problem helfen kann? Ich hoffe das Thema ist hier richtig... Ich muss momentan X-Path Ausdrücke erstellen, da diese für ein größeres Projekt in Typo3 eingebaut werden. <?xml version="1.0" encoding="UTF-8" ?> [INDENT]<cmiData> [INDENT] <tag key="BohlenaußenmaßB"> [INDENT] <string locale="es">Bohlen anchura exterior</string> <string>Bohlenaußenmaß Breite</string> <string locale="en">Bohlen Outer width</string> <string locale="fr">Bohlen Largeur hors tout</string> [/INDENT] </tag>[/INDENT] </cmiData>[/INDENT] Wie man sieht geht es hier um mehrsprachigkeit und das System aus dem dieses XML stammt, ist für mich nicht antastbar. Zu erkennen ist, dass der <string> ohne "locale" der Deutsche Wert ist. Und ob mans glaubt oder nicht, ich schaffe es nicht in einem X-Path auszudrücken, dass ich die gewünschte Sprache angezeigt bekomme, und einem Wert, der nicht da drin vorkommt, z.B. "de" oder "au" immer den deutschen Wert (also Std-Wert) bekomme. Momentan mache ich folgendes: $xml->xpath('/cmiData/tag[@key="BohlenaußenmaßB"]/string [ @locale="'.$sprache.'" or not(@locale) ] ') Das funktioniert soweit - ausser dass ich den deutschen Wert IMMER mit angezeigt bekomme. :upps Das ganze könnte man selbstverständlich über PHP regeln, aber das ganze soll von TypoScript geparsed und ausgeführt werden. Damit habe ich nur eine Wahl, ich muss das mit einem X-Path Ausdruck schaffen. Danke fürs Lesen -
19. August 200916 j Das funktioniert soweit - ausser dass ich den deutschen Wert IMMER mit angezeigt bekomme. :upps Das wird wohl an Deiner Bedingung liegen. Überlege Dir einmal was das "or" bedeutet. Das logische oder wird wahr, wenn einer der Eingänge wahr ist oder wenn beide wahr sind. Da Du hast: local = X or not(local). Der Ausdruck wird nun für jeden Eintrag ausgewertet. Bsp: Du willst "fr". Beim den Einträgen hast Du dann 1. local = false or false => false 2. local = false or true => true 3. local = false or false => false 4. local = true or false => true Überlege Dir was Du wirklich für ein "oder" willst
20. August 200916 j Überlege Dir was Du wirklich für ein "oder" willst Guten morgen.....ein exklusiv oder gibts nicht im Xpath.....sonst wäre das Problem schon gelöst
20. August 200916 j ein xor kannst Du über and, or und not notfalls bauen. Ich bin gerade nicht so in XPATH drin, als dass ich eine direkte Lösung im Kopf habe (müsste erst nachlesen)
20. August 200916 j Ok. [( (@locale="'.$sprache.'" and not(@locale)) or (not(@locale="'.$sprache.'") and @locale) )] waren mein Versuch ein XOR nachzustellen....klappt leider nicht.
20. August 200916 j waren mein Versuch ein XOR nachzustellen....klappt leider nicht. Natürlich, denn für Deine Einträge wird das XOR auch komplett ausgeführt: 1. local = false xor false => false 2. local = false xor true => true 3. local = false xor false => false 4. local = true xor false => true Damit ist das Problem analog zu "or" Was Du willst ist ein switch-case-break-default, d.h. wenn genau ein Eintrag zutrifft, dann soll er genau diesen einen nehmen, wenn keiner zutrifft, dann den "default"
20. August 200916 j Was Du willst ist ein switch-case-break-default, d.h. wenn genau ein Eintrag zutrifft, dann soll er genau diesen einen nehmen, wenn keiner zutrifft, dann den "default" Jepp. Und jetzt gebe ich mich geschlagen.
Erstelle ein Konto oder melde dich an, um einen Kommentar zu schreiben.