我有一个xml文件,其中有标签,&lt; Gender /&gt;它带有'M'或'F'作为数据,现在我的工作是测试值并分别根据值M或F写<Gender_Tag>Male</Gender_Tag>
或<Gender_Tag>Female</Gender_Tag>
..我试过这段代码..它曾经在其他情况下工作..
答案 0 :(得分:12)
模板中表示的所有相对路径都是针对当前节点进行评估的。您的模板与性别元素匹配,因此 Gender ='M'如果有任何名为'Gender'的 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>
编辑:您也可以使用两个模板
<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>
答案 1 :(得分: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>
答案 2 :(得分: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>
我的例子与Scoregraphic的两点不同:
它使用xsl:choose来确保只创建一个Gender_Tag元素(这也意味着,如果文本不是'M',它总是一个女性)
使用normalize-space()
剥离元素文本内容周围的空白区域。
答案 3 :(得分:2)
没有看到XML很难确定,但我认为您的示例XSLT应该是:
<xsl:template match="root/details/Gender">
<xsl:if test=".='M'">
<Gender_Tag><xsl:text>Male</xsl:text></Gender_Tag>
</xsl:if>
<xsl:if test=".='F'">
<Gender_Tag><xsl:text>Female</xsl:text></Gender_Tag>
</xsl:if>
</xsl:template>
根据另一个答案选择使用会更好(虽然我认为当条款而不是时间和其他时候应该是两个明确的)