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

使用xmlstarlet与XPath替换XML节点中的HTML实体

解决xmlstarlet处理HTML实体转义的shell报错问题

错误原因

你遇到的zsh: command not found: lt错误,是因为shell把命令中的&识别成了后台执行标记,后续的lt被当作独立命令执行,导致找不到该命令。核心问题是没有正确转义XML实体字符串,让shell不解析这些特殊字符,同时让xmlstarlet能正确识别处理。

解决方案

使用xmlstarlet的ed(编辑)命令,结合XPath的replace函数,通过单引号包裹XPath表达式避免shell解析特殊字符,完成实体替换:

xmlstarlet ed -u "//content[@type='html']" -x "replace(replace(., '&amp;lt;', '<'), '&amp;gt;', '>')" input.xml > output.xml

命令说明

  • -u "//content[@type='html']":定位到所有type='html'的content节点
  • -x "replace(...):用XPath的嵌套replace函数,先将&amp;lt;替换为<,再将&amp;gt;替换为>
  • 用单引号包裹XPath表达式,确保shell不会解析其中的&等特殊字符,直接传递给xmlstarlet处理

替代写法(转义&字符)

如果不想用单引号,也可以对每个&加反斜杠转义,让shell不把它当作后台标记:

xmlstarlet ed -u "//content[@type='html']" -x "replace(replace(., '\&amp;\&lt;', '<'), '\&amp;\&gt;', '>')" input.xml > output.xml

执行上述命令后,input.xml中content节点内的&amp;lt;和&amp;gt;会被替换为实际的<和>,结果保存到output.xml。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.12 08:53:11