npsobj_switch ::= <npsobj switch = "switchName"> { <npsobj casecond = "caseCondition" [ negate = "" ] [ proceed = ( "yes" | "no" ) ] ( name = "caseName" | value = "caseValue" )> content </npsobj> } [ <npsobj casecond = "default" [ proceed = ("yes" | "no" ) ] > content </npsobj> ] </npsobj>
Mit diesem Element lässt sich ein Wert (switchName
) des aktuellen Kontexts mit mehreren anderen Werten (caseName
) oder Konstanten (caseValue
) vergleichen. Für jeden Vergleich kann einer der unter npsobj_condition
aufgeführten Vergleichsoperatoren (caseCondition
) verwendet werden. Wird ein unärer Vergleichsoperator (wie isEmpty
) auf switchName
angewendet, so werden caseName
und caseValue
ignoriert, andernfalls wird switchName
mit caseName
oder caseValue
verglichen, je nachdem, ob name
oder value
angegeben wurde. Trifft ein Vergleich zu, wird der content
des betreffenden caseCond
-Elements ausgewertet.
switchName
und caseName
können alle im aktuellen Kontext verfügbaren Namen sein, während mit caseValue
eine konstante Zeichenkette angegeben werden kann. Mit dem optionalen Attribut negate
kann das Ergebnis der Vergleichsoperation umgekehrt werden. Wird als caseCondition
kein Vergleichsoperator, sondern default
angegeben, so trifft der betreffende Vergleich immer zu. Typischerweise ist default
in einer switch
-Anweisung der letzte Vergleich, um den Fall zu behandeln, dass keiner der vorausgegangenen Vergleiche zutraf.
Mit dem optionalen Attribut proceed
kann man steuern, ob die nächste casecond
-Anweisung im switch
-Block auch dann abgearbeitet werden soll, wenn der Vergleich zutrifft (Voreinstellung: no
).
Innerhalb eines switch
-Elements werden nur casecond
-Elemente ausgewertet. Text sowie weitere Elemente auf der gleichen Ebene werden ignoriert.
<npsobj switch="name"> <npsobj casecond="isEqual" value="news1"> Newsordner 1 </npsobj> <npsobj casecond="isEqual" value="news2"> Newsordner 2 </npsobj> <npsobj casecond="default"> Keine Newsordner </npsobj> </npsobj>