如何根据输入XML根元素动态设置XSLT的<xsl:output>参数
动态根据根元素调整XSLT输出配置
刚好可以用XSLT 2.0的use-when特性来搞定这个需求,不用改动你原有的身份转换模板,只需要给不同的输出配置加上生效条件即可。
修改后的XSLT代码
<?xml version="1.0" encoding="UTF-8"?> <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="2.0"> <!-- 根元素为<a>时启用的输出配置 --> <xsl:output method="xml" encoding="UTF-8" indent="yes" use-when="name(/*) = 'a'"/> <!-- 根元素非<a>时启用的输出配置 --> <xsl:output method="xml" encoding="us-ascii" indent="no" use-when="name(/*) != 'a'"/> <!-- 原有的身份转换模板,保持不变 --> <xsl:template match="node()|@*"> <xsl:copy> <xsl:apply-templates select="node()|@*"/> </xsl:copy> </xsl:template> </xsl:stylesheet>
逻辑说明
use-when是XSLT 2.0新增的顶层元素属性,它能根据指定的XPath表达式判断当前元素是否生效;- 第一个
<xsl:output>会在输入XML的根元素名称为a时激活,完全保留你原来的输出配置(UTF-8编码、开启缩进); - 第二个
<xsl:output>会在根元素不是a时生效,自动切换为US-ASCII编码并关闭缩进; - 原有的身份转换模板负责原样复制输入XML的所有内容,确保数据结构不会被修改,只是输出格式随根元素动态调整。
内容的提问来源于stack exchange,提问作者Rupesh_Kr
相关产品推荐
相关产品推荐

