2

这应该很简单,但我无法弄清楚这一点。我有一些 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>

谢谢

4

2 回答 2

3

将您更改xsl:if为:

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

或更改xsl:template match为:

<xsl:template match="date_of_birth[. = '']">
于 2013-11-13T14:48:01.110 回答
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>
于 2013-11-14T02:49:41.247 回答