Ответ 1
Это преобразование:
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output omit-xml-declaration="yes" indent="yes"/>
<xsl:strip-space elements="*"/>
<xsl:template match="@*|node()">
<xsl:copy>
<xsl:apply-templates select="@*|node()"/>
</xsl:copy>
</xsl:template>
<xsl:template match="Number[not(node())]">
<Number>0.00</Number>
</xsl:template>
<xsl:template match="Text[not(node())]">
<Text>nill</Text>
</xsl:template>
</xsl:stylesheet>
при применении к этому XML-документу (поскольку ни один не предоставлен):
<t>
<Number>10</Number>
<Number/>
<Text>Hello</Text>
<Text/>
</t>
создает желаемый, правильный результат:
<t>
<Number>10</Number>
<Number>0.00</Number>
<Text>Hello</Text>
<Text>nill</Text>
</t>
Примечание:
Чтобы получить систематические знания для решения основных проблем, подобных этому, я (бесстыдно) рекомендую посмотреть этот учебный курс Pluralsight: