XSLT转换XML文件时如何将三字母颜色缩写替换为完整名称
实现方案
你可以通过在匹配tow的模板中添加xsl:choose条件判断,实现三字母颜色缩写到完整名称的映射,仅需要修改匹配tow节点的模板部分即可,无需调整其他现有逻辑。
修改后完整XSL代码
<?xml version="1.0" encoding="UTF-8" ?> <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="/"> <xsl:element name="summary"> <state name="Arizona"> <xsl:apply-templates select="response/tow[state = 'AZ']"> <xsl:sort select="tow_date" order="ascending" /> </xsl:apply-templates> </state> <state name="Florida"> <xsl:apply-templates select="response/tow[state = 'FL']"> <xsl:sort select="tow_date" order="ascending" /> </xsl:apply-templates> </state> <state name="New York"> <xsl:apply-templates select="response/tow[state = 'NY']"> <xsl:sort select="tow_date" order="ascending" /> </xsl:apply-templates> </state> </xsl:element> </xsl:template> <xsl:template match="tow" > <!-- 颜色缩写映射逻辑 --> <xsl:variable name="colorFullName"> <xsl:choose> <xsl:when test="color = 'WHI'">WHITE</xsl:when> <xsl:when test="color = 'GRY'">GRAY</xsl:when> <xsl:when test="color = 'BLK'">BLACK</xsl:when> <!-- 未匹配到的颜色保留原缩写,可根据需求调整 --> <xsl:otherwise><xsl:value-of select="color"/></xsl:otherwise> </xsl:choose> </xsl:variable> <vehicle date="{tow_date}" plate="{plate}" color="{$colorFullName}" /> </xsl:template> </xsl:stylesheet>
转换后输出结果
<?xml version="1.0" encoding="UTF-8"?> <summary> <state name="Arizona"> <vehicle date="2021-10-10" plate="549XIB" color="WHITE"/> </state> <state name="Florida"> <vehicle date="2021-10-24" plate="LDNE06" color="GRAY"/> </state> <state name="New York"> <vehicle date="2021-11-06" plate="HDU4518" color="BLACK"/> </state> </summary>
后续需要新增颜色映射规则时,直接在xsl:choose块中添加对应xsl:when条目即可。
内容的提问来源于stack exchange,提问作者ghostgif
相关产品推荐
相关产品推荐

