You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用XSLT处理LDAP电话号码:插入*生成两种输出

XSLT实现电话号码双格式输出解决方案

需求:基于LDAP返回的telephoneNumber值生成两种输出结果:

  • 保留原号码(如输入8989输出8989)
  • 在号码第二位插入*(如输入8989输出8*989)

原有单输出代码

<Extension>
    <xsl:value-of select="telephonenumber"/>
</Extension>

尝试代码的问题

你之前用xsl:for-each循环并直接输出#*###的方式无效,因为这只是静态文本,无法根据实际号码动态生成格式化内容。要实现需求,需要通过字符串截取拼接或正则替换来处理。

解决方案

方案1:XSLT 1.0 实现

XSLT 1.0需借助substring和concat函数完成字符串拼接:

<!-- 输出原号码 -->
<Extension>
    <xsl:value-of select="telephonenumber"/>
</Extension>

<!-- 输出第二位插入*的格式 -->
<Extension>
    <xsl:value-of select="concat(substring(telephonenumber, 1, 1), '*', substring(telephonenumber, 2))"/>
</Extension>
  • substring(telephonenumber, 1, 1):提取号码的第一个字符
  • concat:将第一个字符、*、从第二个字符开始的剩余内容拼接为新字符串

如果需要处理多个telephoneNumber节点,用xsl:for-each循环包裹:

<xsl:for-each select="telephoneNumber">
    <!-- 原号码 -->
    <Extension>
        <xsl:value-of select="."/>
    </Extension>
    <!-- 格式化后号码 -->
    <Extension>
        <xsl:value-of select="concat(substring(., 1, 1), '*', substring(., 2))"/>
    </Extension>
</xsl:for-each>

方案2:XSLT 2.0+ 实现

XSLT 2.0及以上支持replace正则函数,写法更简洁:

<xsl:for-each select="telephoneNumber">
    <!-- 原号码 -->
    <Extension>
        <xsl:value-of select="."/>
    </Extension>
    <!-- 格式化后号码 -->
    <Extension>
        <xsl:value-of select="replace(., '^(.)', '$1*')"/>
    </Extension>
</xsl:for-each>
  • replace(., '^(.)', '$1*'):用正则匹配号码的第一个字符,替换为「第一个字符+*」,实现插入效果

内容的提问来源于stack exchange,提问作者Scutch

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.16 13:51:10