PHuV
2006-06-28, 18:23:33
Frage an XSLT Spezis, wie Frage ich den einen leeren Knoten ab?
Normalerweise hat mapAttribute noch Kindelemente:
<mapAttribute key="de.xxx.yyy.ATTR_PARAMETERS_ENABLED">
<mapEntry key="BLUB" value="true"/>
<mapEntry key="LABER" value="true"/>
</mapAttribute>
Aber es kann vorkommen, daß nichts drin ist und es ein leeres Tagelement ist:
<mapAttribute key="de.xxx.yyy.ATTR_PARAMETERS_ENABLED"/>
Und wie kann ich das mit XSLT prüfen, ob dieser Fall nun vorliegt. Ich kekse mit count und not(node()) rum, geht aber nix :( .
Ich habe den XSLT-Code von einem Kollegen (der gerade im Urlaub ist), welcher mir eine
java.lang.ArrayIndexOutOfBoundsException: 1 >= 1
wirft, klar, weil keine mapEntry's vorhanden sind:
<xsl:for-each select="mapAttribute[@key='org.eclipse.debug.core.environmentVariables']/mapEntry">
<xsl:variable select="@key" name="varName"/>
<xsl:if test="/launchConfiguration/mapAttribute[@key='de.yyy.xxx.ATTR_PARAMETERS_ENABLED']/mapEntry[@key=$varName]/@value='true'">
<xsl:value-of select="@key"></xsl:value-of>
<xsl:text>=</xsl:text>
<xsl:value-of select="@value"></xsl:value-of>
<xsl:text>
</xsl:text>
</xsl:if>
</xsl:for-each>
Und jetzt will ich einfach vorher eine if-Abfrage einbauen, was vorher prüft, ob überhaupt mapAttribute ein leeres Tag ist, bekomme das aber nicht hin (als XSLT Neuling).
Normalerweise hat mapAttribute noch Kindelemente:
<mapAttribute key="de.xxx.yyy.ATTR_PARAMETERS_ENABLED">
<mapEntry key="BLUB" value="true"/>
<mapEntry key="LABER" value="true"/>
</mapAttribute>
Aber es kann vorkommen, daß nichts drin ist und es ein leeres Tagelement ist:
<mapAttribute key="de.xxx.yyy.ATTR_PARAMETERS_ENABLED"/>
Und wie kann ich das mit XSLT prüfen, ob dieser Fall nun vorliegt. Ich kekse mit count und not(node()) rum, geht aber nix :( .
Ich habe den XSLT-Code von einem Kollegen (der gerade im Urlaub ist), welcher mir eine
java.lang.ArrayIndexOutOfBoundsException: 1 >= 1
wirft, klar, weil keine mapEntry's vorhanden sind:
<xsl:for-each select="mapAttribute[@key='org.eclipse.debug.core.environmentVariables']/mapEntry">
<xsl:variable select="@key" name="varName"/>
<xsl:if test="/launchConfiguration/mapAttribute[@key='de.yyy.xxx.ATTR_PARAMETERS_ENABLED']/mapEntry[@key=$varName]/@value='true'">
<xsl:value-of select="@key"></xsl:value-of>
<xsl:text>=</xsl:text>
<xsl:value-of select="@value"></xsl:value-of>
<xsl:text>
</xsl:text>
</xsl:if>
</xsl:for-each>
Und jetzt will ich einfach vorher eine if-Abfrage einbauen, was vorher prüft, ob überhaupt mapAttribute ein leeres Tag ist, bekomme das aber nicht hin (als XSLT Neuling).