400 8949 560

NEWS/新闻

分享你我感悟

您当前位置> 主页 > 新闻 > 技术开发

XSLT怎么生成动态的HTML属性名和标签名

发表时间:2026-01-02 00:00:00

文章作者:月夜之吻

浏览次数:

XSLT中动态生成HTML标签名和属性名须用xsl:element和xsl:attribute配合AVT,标签名如,属性名如,属性值可用AVT如class="{@status}",但属性名不可直接AVT。

在XSLT中生成动态的HTML标签名和属性名,核心是使用 attribute value template(AVT)xsl:element / xsl:attribute 动态构造节点,不能直接写死标签或属性名。

xsl:element 动态生成标签名

当标签名来自XML数据(比如 `div` 或 `@type="section"`),必须用 xsl:element,不能直接写 `

`。

  

假设当前节点有属性 type="article",上面代码就等价于:。花括号里的表达式会求值,结果作为标签名。

注意:
– 名字必须是合法的XML/HTML标签名(不能含空格、不能以数字开头);
– 如果值为空或非法,XSLT处理器通常报错或忽略;
– 可嵌套使用,比如 生成 h1、h2 等。

xsl:attribute 动态生成属性名

属性名(如 classdata-id)同样不能硬编码,需用 xsl:attribute 配合 AVT:

  
    
  
  Content

若 XML 中有 ,就会输出:Content

常见组合写法:

  • name="{concat('data-', @key)}" 拼接前缀
  • name="{lower-case(@role)}" 统一大小写(XSLT 2.0+)
  • 配合 xsl:choose 控制是否生成某属性(避免空属性)

用 AVT 直接写在静态标签里(仅限属性值,不适用于属性名)

如果只是属性要动态(如 class="active"),可以直接用花括号: —— 这很常用,但注意:AVT 不能用于属性本身,下面写法是错误的:

 ❌ 不合法

必须改用 xsl:attribute

安全与兼容性提醒

动态标签/属性名容易引入 XSS 或结构错误,建议:

  • 对来源数据做白名单校验(例如只允许 divspandata-* 类属性名)
  • XSLT 1.0 不支持函数如 lower-case(),可用 translate() 替代
  • 浏览器原生 XSLT(如旧版 IE)不支持 xsl:element 在 HTML 输出模式下的某些行为,建议服务端转换
  • 生成自定义元素(如 my-widget)时,确保目标环境支持(现代 HTML 允许,但需 JS 配合)

基本上就这些。关键记住:标签名和属性名要动态 → 必须用 xsl:elementxsl:attribute;属性值动态 → 可直接 AVT。不复杂但容易忽略语法边界。

相关案例查看更多