You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在XSL 1.0中基于XML标签上下文实现条件转换?

XSL 1.0 实现指定XML标签转换的<xsl:when>表达式方案

原始XML示例

...
<tag1>content1</tag1>
<tag2/>
<tag3>content<b>3</b></tag3>
<tag4><ul>....</ul></tag4>
...

转换需求

  • 若标签内容无指定列表中的外围标签(如tag1、tag3),需转换为 <p>(标签内容)</p>
  • 若标签为空(如tag2),不生成任何内容
  • 若标签包含指定列表中的外围标签(如ul、div,如tag4),直接输出标签内容,无需包裹<p>标签

解决方案(兼容浏览器的XSL 1.0实现)

以下是针对需求编写的XSLT模板及对应的<xsl:when>测试表达式:

<!-- 匹配需要处理的目标标签,可根据实际需求扩展标签列表 -->
<xsl:template match="tag1 | tag2 | tag3 | tag4">
  <xsl:choose>
    <!-- 条件1:标签为空,无输出 -->
    <xsl:when test="not(node())">
      <!-- 空操作,不生成任何内容 -->
    </xsl:when>
    <!-- 条件2:包含指定外围标签(ul、div),直接输出内容 -->
    <xsl:when test="ul | div">
      <xsl:copy-of select="node()"/>
    </xsl:when>
    <!-- 条件3:其他非空情况,用<p>包裹输出 -->
    <xsl:otherwise>
      <p>
        <xsl:copy-of select="node()"/>
      </p>
    </xsl:otherwise>
  </xsl:choose>
</xsl:template>

各条件表达式说明

  1. 判断标签为空:test="not(node())"

    • 检查当前标签是否没有任何子节点(包括文本、元素等所有节点类型),精准匹配空标签如<tag2/>。
  2. 判断包含指定外围标签:test="ul | div"

    • 枚举需要识别的外围标签,检查当前标签的直接子节点中是否存在这些元素。如果需要匹配所有后代节点(而非仅直接子节点),可修改为test=".//ul | .//div"。
  3. 默认非空且无指定标签的情况:通过<xsl:otherwise>自动匹配,无需额外表达式,覆盖前两个条件未命中的场景。

内容的提问来源于stack exchange,提问作者rhavin

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.08 04:25:14