如何比较两个标签并使用xlst生成xml模板



我有带标记的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元素的内容。

最新更新