我有一个xml文件,其中有标签,即 <Gender/> 它携带'M'或'F'作为数据,现在我的工作是测试值并分别根据值M或F写入<Gender_Tag>Male</Gender_Tag>
或写入或..<Gender_Tag>Female</Gender_Tag>
我试过这段代码..它曾经在其他情况下工作..
问问题
37054 次
4 回答
13
模板中表示的所有相对路径都针对当前节点进行评估。您的模板匹配 Gender 元素,因此如果有任何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>
编辑:您也可以使用两个模板
<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>
于 2009-11-23T09:17:32.063 回答
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>
于 2009-11-23T09:02:40.983 回答
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()
条形空白。
于 2009-11-23T09:15:21.983 回答
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>
根据另一个答案使用选择会更好(尽管我认为应该是两个明确的 when 子句而不是 when 和 else)
于 2009-11-23T09:16:43.507 回答