在XSLT 1.0中为每个空XML标记设置默认值

时间:2016-07-01 16:26:27

标签: xml xslt-1.0

我需要使用XSLT 1.0将默认文本或数字写入空XML标记,然后在StackOverflow中搜索时,我碰巧在此post

中查看Dimitre的解决方案

我需要的是例如我有一个如下标签:

<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 个答案:

答案 0 :(得分: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 and 1.0 Foundations