我有带标记的xml,updateTypes,可能值为"LINE","HEADER"。它只能是"LINE"或"HEADER"。也可以是"LINE"one_answers"HEADER"的组合。
带有LINE和HEADER的XML
<message>
<orderOfficeId>1</orderOfficeId>
<channelMthdCd>1</channelMthdCd>
<updateTypes>LINE</updateTypes>
<updateTypes>HEADER</updateTypes>
<message>
XML与LINE
<message>
<orderOfficeId>1</orderOfficeId>
<channelMthdCd>1</channelMthdCd>
<updateTypes>LINE</updateTypes>
<message>
带有HEADER的XML
<message>
<orderOfficeId>1</orderOfficeId>
<channelMthdCd>1</channelMthdCd>
<updateTypes>HEADER</updateTypes>
<message>
这是我的xslt,它需要根据updateType值生成xml。它在一个可能的案例中运行良好。但它不适用于该标记的多个值。我能知道如何确保它有效地基于值工作吗?它可以是一个updateType或两者的组合。
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
<xsl:output method="xml" encoding="UTF-8" indent="yes"/>
<xsl:strip-space elements="*"/>
<xsl:template match="/">
<MESSAGE>
<SEG>
<xsl:choose>
<xsl:when test="message/updateTypes= 'HEADER'">
<HEAD>
<TEST>HEAD</TEST>
<TYP>C</TYP>
</HEAD>
</xsl:when>
</xsl:choose>
<xsl:choose>
<xsl:when test="message/updateTypes= 'LINE' and 'HEADER'">
<HEAD>
<TEST>HEAD</TEST>
<TYP>D</TYP>
</HEAD>
</xsl:when>
</xsl:choose>
<xsl:choose>
<xsl:when test="message/updateTypes= 'LINE'">
<HEAD>
<TEST>HEAD</TEST>
<TYP>B</TYP>
</HEAD>
</xsl:when>
</xsl:choose>
</SEG>
</MESSAGE>
</xsl:template>
</xsl:stylesheet>
输出:
<message>
<SEG>
<HEAD>
<TEST>HEAD</TEST>
<TYP>B</TYP>
</HEAD>
</SEG>
<message>
预期输出:
<message>
<SEG>
<HEAD>
<TEST>HEAD</TEST>
<TYP>D</TYP>
</HEAD>
</SEG>
<message>
如果我猜对了,你想做:
XSLT 1.0
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes"/>
<xsl:template match="/message">
<MESSAGE>
<SEG>
<HEAD>
<TEST>HEAD</TEST>
<TYP>
<xsl:choose>
<xsl:when test="updateTypes='HEADER' and updateTypes='LINE'">D</xsl:when>
<xsl:when test="updateTypes='LINE'">B</xsl:when>
<xsl:when test="updateTypes='HEADER'">C</xsl:when>
</xsl:choose>
</TYP>
</HEAD>
</SEG>
</MESSAGE>
</xsl:template>
</xsl:stylesheet>
请注意,测试的顺序很重要;xsl:choose
将返回测试返回true的第一个xsl:when
元素的内容。