我有一个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)
未经测试,但可能有效......
<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)
<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的两点不同:
它使用xsl:choose来确保只创建一个Gender_Tag元素(这也意味着,如果文本不是'M',它总是一个女性)
使用normalize-space()条带白色空间围绕元素的文本内容.