Следующее преобразование должно помочь вам справиться со всеми случаями.
Если содержание node1
является текстом, вы можете использовать text()
для его обнаружения. Если контент представляет собой любой элемент, вы можете использовать его для обнаружения его *
. Чтобы проверить, является ли он пустым, вы можете добавить условие not(node())
. Если вы хотите делать что-либо, если нет node1
, добавьте условие not(node1)
к корневому узлу.
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="/rootNode/node1/text()">
has text
</xsl:template>
<xsl:template match="/rootNode/node1/*">
has elements
</xsl:template>
<xsl:template match="/rootNode/node1[not(node())]">
is empty
</xsl:template>
<xsl:template match="/rootNode[not(node1)]">
no node1
</xsl:template>
</xsl:stylesheet>
Вы можете применить то же самое в xsl:if
узлах:
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="/rootNode">
<xsl:if test="node1/text()">
has text
</xsl:if>
<xsl:if test="node1/*">
has elements
</xsl:if>
<xsl:if test="node1[not(node())]">
is empty
</xsl:if>
<xsl:if test="not(node1)">
no node1
</xsl:if>
</xsl:template>
</xsl:stylesheet>
Что вы подразумеваете под "null"? В XML нет такой вещи. Вы имеете в виду элемент, который присутствует, но не имеет содержания? –