如何通过XSLT转换临时员工ID格式?CONTINGENT_WORKER转CW
没问题,我帮你搞定这个ID格式转换的需求!下面是针对你场景的XSLT代码,以及详细的解释:
XSLT解决方案:裁剪临时员工ID格式
需求分析
你需要针对临时员工的ID做格式转换:将CONTINGENT_WORKER-xxx格式的ID替换为CW-xxx,其他员工ID保持原样。我们可以通过XSLT的条件判断和字符串处理函数来实现。
XSLT 2.0+ 代码示例
这个版本使用replace()函数,代码更简洁:
<?xml version="1.0" encoding="UTF-8"?> <xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> <!-- 身份模板:默认复制所有节点和属性 --> <xsl:template match="@*|node()"> <xsl:copy> <xsl:apply-templates select="@*|node()"/> </xsl:copy> </xsl:template> <!-- 专门处理id元素 --> <xsl:template match="id"> <xsl:copy> <!-- 判断是否是临时员工ID --> <xsl:choose> <xsl:when test="starts-with(., 'CONTINGENT_WORKER-')"> <!-- 替换前缀为CW --> <xsl:value-of select="replace(., 'CONTINGENT_WORKER', 'CW')"/> </xsl:when> <xsl:otherwise> <!-- 其他ID直接输出 --> <xsl:value-of select="."/> </xsl:otherwise> </xsl:choose> </xsl:copy> </xsl:template> </xsl:stylesheet>
XSLT 1.0 兼容版本
如果你使用的是XSLT 1.0(不支持replace()函数),可以用字符串截取的方式实现:
<?xml version="1.0" encoding="UTF-8"?> <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> <!-- 身份模板 --> <xsl:template match="@*|node()"> <xsl:copy> <xsl:apply-templates select="@*|node()"/> </xsl:copy> </xsl:template> <!-- 处理id元素 --> <xsl:template match="id"> <xsl:copy> <xsl:choose> <xsl:when test="starts-with(., 'CONTINGENT_WORKER-')"> <!-- 截取前缀后的部分,拼接CW- --> <xsl:text>CW-</xsl:text> <xsl:value-of select="substring-after(., 'CONTINGENT_WORKER-')"/> </xsl:when> <xsl:otherwise> <xsl:value-of select="."/> </xsl:otherwise> </xsl:choose> </xsl:copy> </xsl:template> </xsl:stylesheet>
转换效果
针对你提供的XML输入:
<?xml version="1.0" encoding="UTF-8"?> <data> <entry> <id>CONTINGENT_WORKER-1-24</id> <fname>john</fname> <lname>viett</lname> </entry> <entry> <id>060786655</id> <fname>Mia</fname> <lname>Nalco</lname> </entry> </data>
转换后的输出会是:
<?xml version="1.0" encoding="UTF-8"?> <data> <entry> <id>CW-1-24</id> <fname>john</fname> <lname>viett</lname> </entry> <entry> <id>060786655</id> <fname>Mia</fname> <lname>Nalco</lname> </entry> </data>
关键说明
- 身份模板(
match="@*|node()")确保XML中除了id元素之外的所有内容都原样复制,不会丢失任何数据。 - 使用
starts-with()函数精准判断临时员工ID,避免误修改其他包含相同字符串的ID。 - 两种版本分别适配不同的XSLT处理器,你可以根据自己的环境选择对应的代码。
内容的提问来源于stack exchange,提问作者Venkata Penumatsa
相关产品推荐
相关产品推荐

