Dreamwriter Geschrieben 19. August 2009 Geschrieben 19. August 2009 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 - Zitieren
flashpixx Geschrieben 19. August 2009 Geschrieben 19. August 2009 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 Zitieren
Dreamwriter Geschrieben 20. August 2009 Autor Geschrieben 20. August 2009 Ü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 Zitieren
flashpixx Geschrieben 20. August 2009 Geschrieben 20. August 2009 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) Zitieren
Dreamwriter Geschrieben 20. August 2009 Autor Geschrieben 20. August 2009 Ok. [( (@locale="'.$sprache.'" and not(@locale)) or (not(@locale="'.$sprache.'") and @locale) )] waren mein Versuch ein XOR nachzustellen....klappt leider nicht. Zitieren
flashpixx Geschrieben 20. August 2009 Geschrieben 20. August 2009 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" Zitieren
Dreamwriter Geschrieben 20. August 2009 Autor Geschrieben 20. August 2009 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. Zitieren
flashpixx Geschrieben 20. August 2009 Geschrieben 20. August 2009 Mal ein Gedankenanstoß: XSLT <xsl:choose> Element Zitieren
Empfohlene Beiträge
Dein Kommentar
Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.