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

XMLStarlet无法移除属性:保留xmlns:md删除其他属性失败

解决XMLStarlet删除默认命名空间属性失败的问题

原命令无法成功删除默认xmlns属性的核心原因是未声明md前缀对应的命名空间URI,XMLStarlet无法识别md:前缀的元素,导致匹配不到目标节点。

正确命令

要保留xmlns:md并删除默认命名空间的xmlns属性,使用以下命令:

xmlstarlet ed -N md="_" -d '/md:EntityDescriptor/@xmlns' <<< '<md:EntityDescriptor xmlns="urn:_" xmlns:md="_"></md:EntityDescriptor>'

如果需要删除除xmlns:md之外的所有其他属性(比如自定义属性),可以用更通用的写法:

xmlstarlet ed -N md="_" -d '/md:EntityDescriptor/@*[not(name()="xmlns:md")]' <<< '<md:EntityDescriptor xmlns="urn:_" xmlns:md="_" extraAttr="value"></md:EntityDescriptor>'

命令说明

  • -N md="_":声明md前缀对应的命名空间URI为_,和XML中xmlns:md="_"的URI保持一致,确保XMLStarlet能定位到<md:EntityDescriptor>元素。
  • -d '/md:EntityDescriptor/@xmlns':精准删除目标元素上的默认命名空间属性。
  • @*[not(name()="xmlns:md")]:匹配元素上所有属性,仅保留xmlns:md,批量删除其余属性。

执行后输出符合预期:

<md:EntityDescriptor xmlns:md="_"></md:EntityDescriptor>

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.17 05:50:36