如何在XSL中添加可调整的*格式化不同长度的SSN?
解决XSL格式化SSN添加星号的问题
实现思路
根据SSN的长度分三种场景处理:
- 9位:直接输出原内容
- 4位:拼接5个
*和原SSN - 空值:输出9个
*
通过string-length()函数判断SSN的长度,结合concat()函数完成星号拼接,用<xsl:choose>实现分支逻辑。
修改后的XSL代码
<?xml version="1.0"?> <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="3.0"> <xsl:output method="text"/> <xsl:template match="/"> SSN <xsl:for-each select="/information/secondBranch"> <xsl:choose> <!-- 处理9位完整SSN --> <xsl:when test="string-length(SSN) = 9"> <xsl:value-of select="SSN"/> </xsl:when> <!-- 处理4位SSN,前缀加5个星号 --> <xsl:when test="string-length(SSN) = 4"> <xsl:value-of select="concat('*****', SSN)"/> </xsl:when> <!-- 处理空值或其他异常情况 --> <xsl:otherwise> <xsl:text>*********</xsl:text> </xsl:otherwise> </xsl:choose> <!-- 换行保证每个SSN单独一行 --> <xsl:text> </xsl:text> </xsl:for-each> </xsl:template> </xsl:stylesheet>
代码说明
- 输出结构优化:原代码中的
<table>等HTML标签与指定的text输出方法冲突,直接改为纯文本输出逻辑,避免冗余; - 分支判断逻辑:
- 用
string-length(SSN)精准匹配不同长度的SSN; - 4位SSN通过
concat('*****', SSN)完成星号与原内容的拼接; - 空值或其他异常长度统一输出9个星号;
- 用
- 格式对齐:添加
<xsl:text> </xsl:text>生成换行符,保证输出与预期格式完全一致。
验证结果
使用你提供的示例XML运行修改后的XSL,将得到如下输出:
SSN 771717771 *****9991 *********
内容的提问来源于stack exchange,提问作者bugs account
相关产品推荐
相关产品推荐

