XSL用数据替换空节点

时间:2013-11-13 14:44:54

标签: xml xslt

这应该很简单,但我无法解决这个问题。我有XML文件包含一些空节点,我想通过XSL用固定字符串替换。如果节点包含数据就可以,但如果它是空的,我想用字符串“18010101”替换它

例如:

在:

<?xml version="1.0"?>
<TopNode>
  <SubNode1>
    <SubNode2>
      <SubNode3>
        <SubNode4>
          <date_of_birth></date_of_birth>
        </SubNode4>
      </SubNode3>
    </SubNode2>
  </SubNode1>
</TopNode>

后:

<?xml version="1.0"?>
<TopNode>
  <SubNode1>
    <SubNode2>
      <SubNode3>
        <SubNode4>
          <date_of_birth>18010101</date_of_birth>
        </SubNode4>
      </SubNode3>
    </SubNode2>
  </SubNode1>
</TopNode>

我有一个类似的问题,我用xsl替换另一个固定值的固定值。

  <xsl:template match="transaction_type[text()='15']">
    <xsl:text>5</xsl:text>
  </xsl:template>

它工作正常,但是当我尝试对日期问题进行类似的修复时,它似乎不起作用。

  <xsl:template match="date_of_birth">
    <xsl:if test="date_of_birth = ''">
      <xsl:text>18010101</xsl:text>
    </xsl:if>
  </xsl:template>

由于

2 个答案:

答案 0 :(得分:3)

将您的xsl:if更改为:

<xsl:if test=". = ''">

或者将您的xsl:template match更改为:

<xsl:template match="date_of_birth[. = '']">

答案 1 :(得分:0)

我会这样做,

<强> XML:

<?xml version="1.0"?>
<TopNode>
  <SubNode1>
    <SubNode2>
      <SubNode3>
        <SubNode4>
          <date_of_birth></date_of_birth>
        </SubNode4>
      </SubNode3>
    </SubNode2>
  </SubNode1>
</TopNode>

<强> XSL:

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
   <xsl:output method="xml" indent="yes" />
   <xsl:template match="@* | node()">
      <xsl:copy>
         <xsl:apply-templates select="@* , node()" />
      </xsl:copy>
   </xsl:template>
   <xsl:template match="date_of_birth">
      <xsl:if test=". = ''">
         <date_of_birth>18010101</date_of_birth>
      </xsl:if>
      <xsl:if test=". != ''">
         <date_of_birth>
            <xsl:value-of select="text()" />
         </date_of_birth>
      </xsl:if>
   </xsl:template>
</xsl:stylesheet>

<强>输出:

<?xml version="1.0" encoding="UTF-8"?>
<TopNode>
   <SubNode1>
      <SubNode2>
         <SubNode3>
            <SubNode4>
               <date_of_birth>18010101</date_of_birth>
            </SubNode4>
         </SubNode3>
      </SubNode2>
   </SubNode1>
</TopNode>