Задайте значение по умолчанию для каждого пустого тега XML в XSLT 1.0

Мне нужно написать текст или номер по умолчанию для пустого тега XML, используя XSLT 1.0, а затем при поиске здесь, в StackOverflow, я, по-видимому, рассмотрю решение Dimitre в post

Что мне нужно, например, у меня есть тег, как показано ниже:

<Number></Number> <!--Which is empty--> 

или

<Text></Text> <!--Which is also empty-->

Мне нужно поставить значение по умолчанию для каждого пустого тега в моем XML, например <Number>0.00</Number> для числовых тегов и <Text>nil</Text> для буквенно-цифровых тегов, у меня довольно большой XML, поэтому есть способ сделать это как шаблон идентификации, где он всегда будет считываться с моего ввода, а затем преобразовать его в значение Вставить значение по умолчанию в пустые строки или я могу сделать только код, как показано ниже, для каждого поля/тегов?

<xsl:copy-of select="concat(categoryName,$vOther[not(string(current()/categoryName))])"/>

Спасибо заранее.

Ответ 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:

XSLT 2.0 и 1.0 Фонды