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

使用xmlstarlet删除XML的xmlns属性失败,提示xpath集合为空

解决xmlstarlet无法删除XML命名空间属性的问题

问题原因

xmlns 不是普通的XML属性,它是命名空间声明,XPath默认不会将其视为常规属性进行匹配;再加上你的XML使用了默认命名空间(无前缀),直接用//@xmlns这类表达式无法定位到目标属性,因此会提示“xpath set is empty”。

正确命令

方法1:绑定命名空间后定位删除

先通过-N参数绑定XML中的默认命名空间(指定一个前缀,比如t),再精准定位根元素并删除其xmlns属性:

xmlstarlet ed -N t="http://www.tandberg.no/XML/CUIL/1.0" -d '/t:History/@xmlns' history.xml

方法2:通过local-name()定位元素

如果不想绑定命名空间,可以用local-name()匹配根元素的名称,再删除其xmlns属性:

xmlstarlet ed -d '/*[local-name()="History"]/@xmlns' history.xml

验证效果

执行上述命令后,XML根元素的xmlns属性会被移除,此时你就可以正常使用xmlstarlet选择元素,无需再考虑命名空间的影响。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.28 12:33:17