XSLT实现userSign匹配列表时修改同interval下shiftGroup值
XSLT实现方案评估
你的实现逻辑正确,符合XSLT 2.0语法规范,测试通过的情况下完全可以满足需求:当interval节点下的userSign属于指定列表时,批量替换该节点下所有shiftGroup的文本值。
可优化建议
如果希望代码更精简易维护,可以做如下调整:
- 清理冗余重复值:你代码中Line_A对应的id列表存在大量重复的数值(比如188166、152560等均重复出现两次),不会影响运行结果,但可以删除重复值降低冗余。
- 省去参数传递逻辑:无需通过interval模板向下传递userSign参数,可以直接在shiftGroup模板中通过轴选择器获取所属interval的userSign值,同时可以删掉自定义的interval匹配模板,仅保留身份模板即可,简化后的shiftGroup模板示例如下:
<xsl:template match="shiftGroup"> <shiftGroup> <!-- 直接向上查找所属interval的userSign值 --> <xsl:variable name="currentUserSign" select="ancestor::interval/employee/userSign"/> <xsl:choose> <xsl:when test="$currentUserSign = (188166, 152560, 513505, 199370...)"> <xsl:text>Line_A</xsl:text> </xsl:when> <!-- 其余判断分支保持原有逻辑不变 --> <xsl:otherwise> <xsl:value-of select="."/> </xsl:otherwise> </xsl:choose> </shiftGroup> </xsl:template>
- 抽离全局映射配置:如果后续需要频繁调整userSign和分组标识的对应关系,可以把所有映射规则抽成全局变量,后续维护不用修改模板逻辑,直接修改变量即可。
以上优化都是可选调整,你现有的实现已经可以正常运行,不需要修改也能满足业务需求。
内容的提问来源于stack exchange,提问作者Ammar Ali
相关产品推荐
相关产品推荐

