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

macOS系统下如何通过XPath从XML中获取换行分隔的匹配内容

macOS低版本xmllint XPath多结果换行输出解决方案

针对libxml2版本低于20909时,xmllint的--xpath参数输出多文本结果直接拼接无分隔的问题,可使用以下几种方案:

方案1:使用xmllint shell模式输出(无需额外安装工具)

通过shell模式的cat命令查询节点,再过滤掉输出中的额外格式行即可:

echo 'cat //foo[@bar="baz"]/text()' | xmllint --shell my.xml | awk '!/^\/ >/ && !/^ -------/'

输出结果:

Lorem
Ipsum
Dolor
Amet

方案2:修改XPath表达式手动追加换行

在XPath中给每个匹配到的文本后拼接换行符,适配自带的低版本libxml2:

xmllint --xpath '//foo[@bar="baz"]/concat(text(), "\n")' my.xml

方案3:安装高版本libxml2(一劳永逸)

macOS自带的libxml2版本偏旧,可通过Homebrew安装最新版本,20909及以上版本默认就会在多个XPath结果之间添加换行分隔:

# 安装最新版libxml2
brew install libxml2
# 临时使用brew版本的xmllint
$(brew --prefix libxml2)/bin/xmllint --xpath '//foo[@bar="baz"]/text()' my.xml
# 如果需要默认使用,可把对应路径加入环境变量,比如在~/.zshrc中加入
export PATH="$(brew --prefix libxml2)/bin:$PATH"

方案4:通过文本处理命令拆分输出

也可以先输出完整匹配元素再提取文本:

xmllint --xpath '//foo[@bar="baz"]' my.xml | sed -E 's/<foo[^>]*>([^<]*)<\/foo>/\1\n/g' | grep -v '^$'

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 08:42:02