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

XSL层级调整:将para的后续list兄弟节点移入para内部

使用XSLT实现兄弟list节点移入前置para节点

实现方案

下面的XSLT可以精准处理你的需求:把para节点之后的所有同级list节点,移入该para的末尾,同时保留嵌套结构的合法性。

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
    <!-- 默认复制模板:保留所有未特殊处理的节点和属性 -->
    <xsl:template match="@*|node()">
        <xsl:copy>
            <xsl:apply-templates select="@*|node()"/>
        </xsl:copy>
    </xsl:template>

    <!-- 匹配后续紧跟list节点的para,处理节点合并 -->
    <xsl:template match="para[following-sibling::*[1][self::list]]">
        <xsl:copy>
            <!-- 复制para自身的属性和原有子内容 -->
            <xsl:apply-templates select="@*|node()"/>
            <!-- 抓取当前para之后所有连续的同级list节点 -->
            <xsl:apply-templates select="following-sibling::list[count(preceding-sibling::para[1]|current())=1]" mode="move"/>
        </xsl:copy>
    </xsl:template>

    <!-- 过滤已经被移入para的list节点,避免重复输出 -->
    <xsl:template match="list[preceding-sibling::*[1][self::para]]"/>

    <!-- 移动list节点时的复制模板 -->
    <xsl:template match="list" mode="move">
        <xsl:copy>
            <xsl:apply-templates select="@*|node()"/>
        </xsl:copy>
    </xsl:template>
</xsl:stylesheet>

关键逻辑说明

  • 默认模板:确保XML中除了需要处理的para和list外,其他所有节点(包括嵌套的para和list)都原样保留,符合DTD的嵌套规则。
  • para匹配规则:只定位到后面直接跟着list的para节点,避免误处理无关的para。
  • 多list处理:通过following-sibling::list[count(preceding-sibling::para[1]|current())=1]可以选中当前para之后所有连续的同级list节点,不管数量多少都能一次性移入。
  • 去重处理:单独匹配已经被移入para的list节点,不输出它们,防止重复内容。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.30 17:17:20