<node>
<node1><node11/></node1>
<node2/>
</node>
Ich möchte, dass mein XSLT überprüft
<xsl:if test="If at least 1 child node exists">
Only node1 can pass the if condition
</xsl:if>
Danke für jede Antwort.
Seien Sie zunächst vorsichtig mit Ihrer Terminologie. Meinen Sie "Knoten" oder "Element"? Ein Knoten kann ein Element, ein Kommentar, ein Text oder eine Verarbeitungsanweisung sein.
Wenn Sie hier jedoch Element meinen, um zu prüfen, dass mindestens ein untergeordnetes Element vorhanden ist, können Sie dies einfach tun (vorausgesetzt, Sie befinden sich in diesem Fall auf dem Element node .
<xsl:if test="*">
In Ihrem Kommentar wird vorgeschlagen, dass nur "node1" die if-Bedingung übergeben kann. Überprüfen Sie daher die Existenz eines bestimmten Elements
<xsl:if test="node1">
Im Kontext des Knotens, den Sie testen, sollte dies funktionieren, um zu testen, ob ein Knoten über child elements verfügt:
<xsl:if test="*">
Only node1 can pass the if condition
</xsl:if>
Wenn Sie tatsächlich Knoten meinten (die Textknoten enthalten würden), würde dies funktionieren, um Textknoten einzuschließen:
<xsl:if test="node()">
Only node1 can pass the if condition
</xsl:if>
Aber <node>
würde auch diesen Test bestehen (<node2>
würde nicht). Ich nahm an, Sie sprachen nur im Zusammenhang mit den untergeordneten Knoten von <node>
, aber vielleicht nicht?
Ausdrücke, die mit einem Knoten übereinstimmen, sind wahr, während Ausdrücke, die mit nichts übereinstimmen, falsch sind, also:
<xsl:if test="node()">
...
</xsl:if>
Ihre Frage und die implizierte Bedingung "Nur Knoten1 kann die If-Bedingung passieren" stimmen jedoch nicht mit dem Beispiel überein. Sowohl node
als auch node1
haben untergeordnete Knoten, daher würden beide diese if-Bedingung übergeben.
Um es streng auf node1
zu begrenzen, müssen Sie entweder sicherstellen, dass der Vorlagenkontext geeignet ist, oder überprüfen, dass der betreffende Knoten nicht das documentElement ist.
Der Wortlaut der Frage ist unklar, aber ich denke, Sie möchten nur Kindknoten verarbeiten, die selbst Kinder (dh Enkel des aktuellen Knotens) haben.
<xsl:template match="node">
do stuff for node
<xsl:apply-templates select="*[*]"/>
</xsl:template>
wendet nur Vorlagen auf node1
an, da es einen untergeordneten Knoten hat, und es werden keine Vorlagen auf node2
angewendet.