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

如何替换XML中的<products>标签?已尝试XSLT但未成功

解决XML中标签属性移除问题

你的问题核心是在匹配标签的模板中错误地保留了原属性的复制操作,原本身不在任何命名空间中,仅带有xsi前缀相关属性,无需额外处理命名空间。

修正后的XSLT代码

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
                xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
                exclude-result-prefixes="xsi">

    <!-- 身份转换模板:复制所有未被特殊模板匹配的节点和属性 -->
    <xsl:template match="@*|node()">
        <xsl:copy>
            <xsl:apply-templates select="@*|node()"/>
        </xsl:copy>
    </xsl:template>

    <!-- 匹配带有xsi:schemaLocation属性的<products>标签,仅复制子节点,不保留属性 -->
    <xsl:template match="products[@xsi:schemaLocation]">
        <products>
            <!-- 只处理子节点,跳过所有属性 -->
            <xsl:apply-templates select="node()"/>
        </products>
    </xsl:template>

</xsl:stylesheet>

关键修改说明

  • 移除了<xsl:apply-templates select="@*|node()"/>中的@*,避免将原标签上的xmlns:xsi和xsi:schemaLocation属性复制到新标签中。
  • 原匹配规则products[@xsi:schemaLocation]是正确的,XSLT中已声明xsi命名空间前缀,可正确匹配对应属性。

转换后结果

<?xml version="1.0" encoding="UTF-8"?>
<products>
    <product>
        <name>Example Product</name>
        <price>10.00</price>
    </product>
</products>

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.22 13:26:14