XSLT:如何处理测试元素的值?

Inf*_*nd' 4 xslt xslt-1.0

我有一个xml文件,其中有标签,<Gender />它带有'M'或'F'作为数据,现在我的工作是测试值并写入<Gender_Tag>Male</Gender_Tag>或分别<Gender_Tag>Female</Gender_Tag>根据值M或F ..我试过这个代码..它曾经在其他情况下工作..

Erl*_*ock 12

模板中表示的所有相对路径将针对当前节点进行评估.您的模板与性别元素匹配,因此如果有一个名为"Gender"的Gender的子项值为"M" ,则Gender ='M'将返回true .我想情况并非如此......

使用点表示当前节点(此处为Gender元素):

<xsl:template match="root/details/Gender">
  <Gender_Tag>  
    <xsl:choose>
      <xsl:when test=".='M'">
        <xsl:text>Male</xsl:text>
      </xsl:when>
      <xsl:otherwise>
       <xsl:text>Female</xsl:text>
      </xsl:otherwise>
    </xsl:choose>
  </Gender_Tag>
</xsl:template>
Run Code Online (Sandbox Code Playgroud)

编辑:您也可以使用两个模板

<xsl:template match="root/details/Gender[.='M']">
  <Gender_Tag>Male</Gender_Tag>
</xsl:template>
<xsl:template match="root/details/Gender[.='F']">
  <Gender_Tag>Female</Gender_Tag>
</xsl:template>
Run Code Online (Sandbox Code Playgroud)


Sco*_*hic 5

未经测试,但可能有效......

<xsl:template match="root/details/Gender">
  <xsl:if test="text()='M'">
    <Gender_Tag>Male</Gender_Tag>
  </xsl:if>
  <xsl:if test="text()='F'">
    <Gender_Tag>Female</Gender_Tag>
  </xsl:if>
</xsl:template>
Run Code Online (Sandbox Code Playgroud)


Bol*_*wyn 5

<xsl:template match="root/details/Gender">
    <xsl:choose>
        <xsl:when test="normalize-space(text())='M'">
            <Gender_Tag>Male</Gender_Tag>
        </xsl:when>
        <xsl:otherwise>
            <Gender_Tag>Female</Gender_Tag>
        </xsl:otherwise>
    </xsl:choose>
</xsl:template>
Run Code Online (Sandbox Code Playgroud)

我的例子与Scoregraphic的两点不同:

  1. 它使用xsl:choose来确保只创建一个Gender_Tag元素(这也意味着,如果文本不是'M',它总是一个女性)

  2. 使用normalize-space()条带白色空间围绕元素的文本内容.