XSLT:使用选择根据true / false转换标记值

时间:2013-12-26 08:43:11

标签: xml xslt

我有一个xml,如:

<TransactionData>
<Tag1>abc</Tag1>
<Tag2>cde</Tag2>
<EnhancedDataIndicator>true</EnhancedDataIndicator> 
 <EmailAddress>bob.smith@email.com</EmailAddress> 
 <PassengerName>SMITH/BOB</PassengerName> 
</TransactionData>

和相应的XSLT如:

...

<xsl:template match="@* | node()">
    <xsl:copy>
      <xsl:apply-templates select="@* | node()"/>
    </xsl:copy>
  </xsl:template> 
   <xsl:template match="EnhancedDataIndicator">
   <xsl:choose>
            <xsl:when test = "EnhancedDataIndicator = 'true'">
              <EnhancedDataIndicator>Y</EnhancedDataIndicator>
            </xsl:when>
            <xsl:otherwise>
            <EnhancedDataIndicator><xsl:text>N</xsl:text></EnhancedDataIndicator>
            </xsl:otherwise>
   </xsl:choose>
 </xsl:template>

我试图输入一个逻辑,当它为'true'时,可以使EnhancedDataIndicator值为'Y',当'false'时,可以使'N'。目前,XSLT没有实现这一点。它始终显示“N”表示EnhancedDataIndicator。 转换后的当前xml如下所示:

 <TransactionData>
    <Tag1>abc</Tag1>
    <Tag2>cde</Tag2>
    <EnhancedDataIndicator>true</EnhancedDataIndicator> 
     <EmailAddress>bob.smith@email.com</EmailAddress> 
     <PassengerName>SMITH/BOB</PassengerName> 
    </TransactionData> 

请告知。

2 个答案:

答案 0 :(得分:5)

由于您的模板已在EnhancedDataIndicator上匹配,因此您只需要测试current()的值,即

        <xsl:when test = ". = 'true'">

答案 1 :(得分:-1)

尝试使用XSLT Online检查您的代码