xslt - 如何根据 XSLT 中单个标签的逗号分隔值生成多个标签?
问题描述
给定输入为 XML:
<root>
<article>
测试1,测试2,测试3</article>
</root>
现在需要 XSLT 逻辑来生成输出 XML
<article>test1</article>
<article>test2</article>
<article>test3</article>
解决方案
通常,您需要元素tokenize
的内容article
并使用 为每个标记创建一个新article
元素xsl:element
,在 XSLT 3 中实现这一目标的一种方法是使用
<xsl:template match="article">
<xsl:apply-templates select="tokenize(., ',')">
<xsl:with-param name="element-name" select="node-name()"/>
</xsl:apply-templates>
</xsl:template>
<xsl:template match=".[. instance of xs:string]">
<xsl:param name="element-name"/>
<xsl:element name="{$element-name}">{.}</xsl:element>
</xsl:template>
最小但完整的样本将是
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:xs="http://www.w3.org/2001/XMLSchema"
exclude-result-prefixes="xs"
expand-text="yes"
version="3.0">
<xsl:mode on-no-match="shallow-copy"/>
<xsl:output indent="yes"/>
<xsl:template match="article">
<xsl:apply-templates select="tokenize(., ',')">
<xsl:with-param name="element-name" select="node-name()"/>
</xsl:apply-templates>
</xsl:template>
<xsl:template match=".[. instance of xs:string]">
<xsl:param name="element-name"/>
<xsl:element name="{$element-name}">{.}</xsl:element>
</xsl:template>
</xsl:stylesheet>
推荐阅读
- c# - DI 未从子接口解析基本接口
- python - 编写函数在python中无法正常工作
- node.js - 尝试从 express js 进行 https 调用时出错
- python-3.x - 来自 Flask 中 FileStorage 的 Pandas read_csv
- ffmpeg - 如何更改参考帧值?
- python-3.x - 无法取消 Twisted Deferred 链 (AlreadyCalledError)
- html - Angular UI bootstrap tooptip 不是自动定位
- laravel - 在 Laravel 中,如果我需要会话参数,如何绑定模型实例?
- google-maps-api-3 - 如何在谷歌地图的标记内定位标签?
- javascript - 从 ExpressJS 应用程序在 axios 中设置动态标题