使用XSLT实现XML标签转换:将Exercise1映射为firstExercise等
XSLT实现XML标签重映射与内容清除
直接上能满足需求的XSLT代码:
<?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> <!-- 清空所有文本节点,只保留标签结构 --> <xsl:template match="text()"> <xsl:text></xsl:text> </xsl:template> <!-- 处理ExerciseN标签的重命名映射 --> <xsl:template match="*[starts-with(local-name(), 'Exercise')]"> <xsl:variable name="num" select="substring-after(local-name(), 'Exercise')"/> <xsl:element name="{ choose( $num = '1', 'firstExercise', $num = '2', 'secondExercise', $num = '3', 'thirdExercise', concat('exercise', $num) <!-- 更多编号的默认命名规则 --> ) }"> <xsl:apply-templates select="@*|node()"/> </xsl:element> </xsl:template> </xsl:stylesheet>
核心逻辑说明:
- 身份模板确保未指定特殊处理的标签结构原样保留
- 文本节点模板直接输出空内容,彻底清除所有数值、空白文本内容
- 针对
ExerciseN标签,先提取编号数字,再通过choose映射到对应的序数命名;如果有更多编号(如Exercise4),默认采用exercise4格式,你可以自行补充choose里的映射规则
转换后的输出结果:
<?xml version="1.0" encoding="UTF-8"?> <option> <firstExercise> <ExerciseTime> <hourMinuteTime></hourMinuteTime> </ExerciseTime> </firstExercise> <secondExercise> <ExerciseTime> <hourMinuteTime></hourMinuteTime> </ExerciseTime> </secondExercise> <thirdExercise> <ExerciseTime> <hourMinuteTime></hourMinuteTime> </ExerciseTime> </thirdExercise> </option>
内容的提问来源于stack exchange,提问作者Iamfitz
相关产品推荐
相关产品推荐

