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

如何在XSL中检测相邻的mydata:ActionText与start_mark处理指令?

实现检测逻辑的XSLT方案

要在匹配mydata:Headings的模板中完成节点相邻检测与分支处理,可通过节点轴查询结合条件判断实现,核心思路是先判断目标节点是否存在,再验证两者是否为相邻的非空白节点:

<xsl:template match="mydata:Headings">
    <!-- 定义变量:判断目标节点是否存在 -->
    <xsl:variable name="has-action-text" select="exists(mydata:ActionText)"/>
    <xsl:variable name="has-start-mark" select="exists(processing-instruction('start_mark'))"/>

    <!-- 检测两种相邻场景:ActionText紧跟start_mark,或start_mark紧跟ActionText(跳过空白文本节点) -->
    <xsl:variable name="action-after-start" select="processing-instruction('start_mark')[
        following-sibling::node()[not(self::text()[normalize-space()=''])][1]
        [self::mydata:ActionText]
    ]"/>
    <xsl:variable name="start-after-action" select="mydata:ActionText[
        following-sibling::node()[not(self::text()[normalize-space()=''])][1]
        [self::processing-instruction('start_mark')]
    ]"/>
    <xsl:variable name="nodes-adjacent" select="$has-action-text and $has-start-mark and ($action-after-start or $start-after-action)"/>

    <!-- 分支处理逻辑 -->
    <xsl:choose>
        <xsl:when test="$nodes-adjacent">
            <xsl:apply-templates select="mydata:ActionText | processing-instruction('start_mark')"/>
        </xsl:when>
        <xsl:when test="$has-action-text">
            <xsl:apply-templates select="mydata:ActionText"/>
        </xsl:when>
        <!-- 若需处理仅存在start_mark的场景,可在此添加xsl:when分支 -->
    </xsl:choose>

    <!-- 按需处理其他子节点,如示例中的mydata:heading1 -->
    <xsl:apply-templates select="mydata:heading1"/>
</xsl:template>

关键细节说明

  1. 空白节点处理:通过following-sibling::node()[not(self::text()[normalize-space()=''])][1]跳过XML中的换行、缩进等空白文本节点,确保仅判断有效节点的相邻关系。
  2. 命名空间注意:需在XSLT的根元素xsl:stylesheet中正确声明mydata命名空间,例如:
    <xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:mydata="http://your-actual-namespace-uri">
    
  3. 分支扩展性:若需要处理仅存在start_mark处理指令的场景,可在xsl:choose中添加对应的分支逻辑。

针对你提供的XML片段,该模板会检测到mydata:ActionText与后续的start_mark处理指令(中间仅空白节点),因此会触发第一个分支,同时处理两个节点。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.01 03:23:28