如何优化XSLT将XML文本转换为Markdown格式的逻辑?
解决XSLT 1.0转换XML含节点到Markdown的问题
首先,假设你的输入XML结构类似这样(若实际结构不同,可对应调整模板匹配规则):
<root> <content> 这是待转换的<bold>加粗文本</bold>,这里还有<bold>另一处加粗</bold>内容,普通文本也需完整保留。 </content> </root>
你的输出仅为“textimprovement”,大概率是原XSLT未递归处理XML中的所有节点,仅提取了固定文本或错误匹配节点所致。以下是修正后的XSLT 1.0代码,可正确将<bold>节点转换为Markdown的**加粗格式:
<?xml version="1.0" encoding="UTF-8"?> <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> <!-- 匹配根节点,触发所有子节点的模板处理 --> <xsl:template match="/"> <xsl:apply-templates/> </xsl:template> <!-- 匹配<bold>节点,输出Markdown加粗语法,同时递归处理内部内容 --> <xsl:template match="bold"> <xsl:text>**</xsl:text> <xsl:apply-templates/> <xsl:text>**</xsl:text> </xsl:template> <!-- 匹配普通文本节点,直接输出内容 --> <xsl:template match="text()"> <xsl:value-of select="."/> </xsl:template> <!-- 匹配其他元素节点,递归处理其子节点,避免丢失内容 --> <xsl:template match="*"> <xsl:apply-templates/> </xsl:template> </xsl:stylesheet>
关键修正说明
- 增加递归模板处理:通过
<xsl:apply-templates/>遍历所有子节点,确保不会遗漏任何文本或嵌套元素 - 针对
<bold>节点定制转换规则:直接替换为Markdown加粗语法,同时支持<bold>内部嵌套其他节点的场景 - 保留普通文本输出逻辑:确保非格式化文本完整呈现
转换效果示例
用上述XSLT处理示例XML,输出结果为:
这是待转换的加粗文本,这里还有另一处加粗内容,普通文本也需完整保留。
若你的XML结构不同(比如<bold>嵌套在自定义节点下),只需调整模板的match属性,确保能正确命中目标节点即可。
内容的提问来源于stack exchange,提问作者Marco S.
相关产品推荐
相关产品推荐

