如何使用XSLT将XML产品名称拆分转换为指定HTML结构?
没问题,咱们可以用XSLT的模板匹配和字符串拆分功能轻松实现这个转换。下面是完整的解决方案:
完整XSLT代码
<?xml version="1.0" encoding="UTF-8"?> <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> <!-- 匹配文档根节点,遍历所有product元素 --> <xsl:template match="/"> <xsl:apply-templates select="product"/> </xsl:template> <!-- 匹配每个product元素,处理name文本拆分 --> <xsl:template match="product"> <h1> <!-- 提取第一个空格前的内容(即"Smartphone") --> <xsl:value-of select="substring-before(name, ' ')"/> <!-- 提取第一个空格后的内容(即"Samsung S6"/"Samsung S8") --> <small><xsl:value-of select="substring-after(name, ' ')"/></small> </h1> </xsl:template> </xsl:stylesheet>
工作原理拆解
- 根模板:匹配整个XML文档,然后调用所有
product元素的模板进行处理。 - product模板:针对每个产品,我们用
substring-before和substring-after两个字符串函数,以空格为分隔符,把name里的内容拆成两部分:substring-before(name, ' '):取空格之前的文本,也就是Smartphone,直接放在<h1>标签内。substring-after(name, ' '):取空格之后的剩余文本,也就是Samsung S6或Samsung S8,把它嵌套在<small>标签里,再放到<h1>内。
测试效果
注意:标准XML必须有且仅有一个根节点,所以我给你的输入XML补了根节点<products>,否则XSLT可能无法正常解析:
<products> <product> <name>Smartphone Samsung S6</name> </product> <product> <name>Smartphone Samsung S8</name> </product> </products>
用上面的XSLT处理后,会得到你想要的HTML输出:
<h1>Smartphone<small>Samsung S6</small></h1> <h1>Smartphone<small>Samsung S8</small></h1>
如果后续产品名称的空格分隔逻辑有变化,还可以用XSLT 2.0及以上支持的tokenize函数做更灵活的拆分,不过针对你给出的示例,上面的代码完全够用啦。
内容的提问来源于stack exchange,提问作者user9119361
相关产品推荐
相关产品推荐

