XSLT 1.0 when
juls_pro_37
- xml
- xsl
0 MudGuard
Hi,
ich würde gerne mittels XSLT ein leeres XML erstellen, falls ein bestimmter Wert (ADD_002/IDENTIFIER) ungleich test1 oder ungleich test2 ist. -> Also, wenn ADD_002/IDENTIFIER = test 1 oder test 2 dann ist alles ok -> Wenn ADD_002/IDENTIFIER = test3, dann soll das XML leer sein. (alle Knoten sollen entfernt werden)
XML:
<?xml version="1.0" encoding="ISO-8859-1"?>
<SEEDESADV>
<CNT>
<GRP>
<MSG>
<ASN>
<ADD_002>
<IDENTIFIER>test3</IDENTIFIER>
</ADD_002>
<ITEM>
<ITEM_POS>
<LINE_ITEM_NUMBER>1</LINE_ITEM_NUMBER>
</ITEM_POS>
</ITEM>
</ASN>
</MSG>
</GRP>
</CNT>
</SEEDESADV>
XSLT:
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" indent="yes" encoding="UTF-8"/>
<xsl:strip-space elements="*" />
<xsl:template match="/">
<xsl:choose>
<xsl:when test="//ADD_002[IDENTIFIER != 'test1' or != 'test2']"></xsl:when>
<xsl:otherwise> <xsl:apply-templates select="@* | node()"/></xsl:otherwise>
</xsl:choose>
</xsl:template>
</xsl:stylesheet>
Vielen Dank
LG Julian
Hi,
ich würde gerne mittels XSLT ein leeres XML erstellen, falls ein bestimmter Wert (ADD_002/IDENTIFIER) ungleich test1 oder ungleich test2 ist.
Also immer?
Denn wenn identifier == test1 ist, ist es ungleich test2, wenn identifier gleich test2 ist, ist es ungleich test1, und als letzter Fall bleibt noch, daß identifier zu beiden ungleich ist.
Du willst:
nicht(identifier == 'test1' oder identifier == 'test2')
XSLT:
<xsl:when test="//ADD_002[IDENTIFIER != 'test1' or != 'test2']"></xsl:when>
nach dem or fehlt der Wert, den Du mit != 'test2' vergleichen willst. Wenn das wieder //ADD_002/IDENTIFIER ist, dann muß das nochmal dastehen.
Und mit / statt [
Aber wie oben schon gesagt, die Bedingung ist so eh nicht richtig.
cu,
Andreas a/k/a MudGuard
also: <xsl:when test="not(//ADD_002/IDENTIFIER = 'test1' or //ADD_002/IDENTIFIER = 'test2')"></xsl:when>
?
Hallo MudGuard,
die Bedingung ist so eh nicht richtig.
"ungleich diesem oder ungleich jenem" ist umgangssprachlich ein "weder noch", und beim Programmieren fällt man darauf rein.
Genauer formuliert ist es das, was Du schriebst: NICHT(dies ODER jenes). Und die beiden Logikregeln von De Morgan sagen:
NICHT(A ODER B) ⇔ (NICHT A) UND (NICHT B)
NICHT(A UND B) ⇔ (NICHT A) ODER (NICHT B)
Der Vorschlag von Juls wird wohl gehen, aber im XSLT könnte auch stehen:
<xsl:when test="//ADD_002[IDENTIFIER != 'test1' and != 'test2']"></xsl:when>
^^^
Das setzt jetzt voraus, dass der Rest der Syntax stimmte. Eine Abkürzungsschreibweise
X != A and != B
an Stelle von X != A and X != B
ist mir bisher nur in der so genannten „Programmiersprache“ COBOL[1] zugestoßen.
Rolf
In Wahrheit ist es eine Kunstsprache, in der man den Literatur-Nobelpreis gewinnen kann ↩︎
@@Rolf B
Eine Abkürzungsschreibweise
X != A and != B
an Stelle vonX != A and X != B
ist mir bisher nur in der so genannten „Programmiersprache“ COBOL zugestoßen.
JavaScript: ![A, B].includes(X)
PHP: !in_array($X, [$A, $B])
😷 LLAP