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

如何在XSLT样式表中添加<FLAG>元素前缀过滤规则?

修改后的XSLT方案

要实现只导入<FLAG>元素值以ABC开头的XML数据,同时保留原有的FLAG值截断功能,你可以这样修改样式表:

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
    <xsl:output omit-xml-declaration="yes" indent="yes"/>
    <xsl:strip-space elements="*"/>

    <!-- 基础复制模板:默认处理所有节点的复制逻辑 -->
    <xsl:template match="node()|@*">
        <xsl:copy>
            <xsl:apply-templates select="node()|@*"/>
        </xsl:copy>
    </xsl:template>

    <!-- 过滤Record节点:仅保留FLAG以ABC开头的记录 -->
    <xsl:template match="Record">
        <xsl:if test="starts-with(normalize-space(ItemMaster/FLAG), 'ABC')">
            <xsl:copy>
                <xsl:apply-templates select="node()|@*"/>
            </xsl:copy>
        </xsl:if>
    </xsl:template>

    <!-- 保留原有的FLAG值截断逻辑 -->
    <xsl:template match="ZBE14_OEMs_ItemUpdate_OUT/Record/ItemMaster/FLAG">
        <xsl:copy>
            <xsl:apply-templates select="@*" />
            <xsl:value-of select="substring(normalize-space(), 1, 19)"/>
        </xsl:copy>
    </xsl:template>
</xsl:stylesheet>

关键改动说明:

  • 新增了<Record>节点的匹配模板,通过starts-with(normalize-space(ItemMaster/FLAG), 'ABC')做条件判断:
    • normalize-space用来处理FLAG值前后可能存在的空格,避免因空格导致匹配失效
    • starts-with函数精准检查FLAG值是否以ABC开头
  • 只有符合条件的Record才会被复制并继续处理其子节点,不符合的Record会直接被跳过
  • 原有的FLAG值截断逻辑完全保留,不会影响原本的功能

效果验证(针对你的示例XML):

处理后只会保留第一个Record(FLAG为ABC的那条),第二个Record(FLAG为DEFGH)会被过滤掉;同时第一个Record里的FLAG值依然会按照原逻辑截断到19个字符(示例中ABC长度不足19,所以保持原样)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 07:24:33