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

如何在Bash中使用xmllint将XML表格的两个字段转为CSV?

嘿,我来帮你把这段XML转换成规范的CSV格式!既然你已经熟悉xmllint,那咱们就基于它来实现,完美衔接你之前的使用习惯。

方法一:快速拼接(适合结构规整的XML)

如果你的XML里每个<tr>的Date和Version节点顺序完全一致,用这个命令就能快速输出CSV:

# 先输出CSV表头
echo "Date,Version"
# 提取所有Date和Version文本,再按行配对拼接
echo "$xml" | xmllint --xpath '//tr/td[@data-title="Date"]/text() | //tr/td[@data-title="Version"]/a/text()' - | paste -d ',' - -

这个命令的逻辑很清晰:先用XPath分别提取所有Date的文本值和所有Version对应的<a>标签文本,再通过paste命令把每两行(一个Date对应一个Version)合并成一行,用逗号分隔,直接生成CSV结构。

方法二:精准配对(避免顺序错乱风险)

如果担心XML结构可能有变动(比如节点顺序颠倒),可以逐个遍历每个<tr>,单独提取每行的Date和Version,确保对应关系绝对准确:

echo "Date,Version"
# 遍历每个<tr>节点
echo "$xml" | xmllint --xpath '//tr' - | while read -r tr_node; do
  # 提取当前行的Date
  current_date=$(echo "$tr_node" | xmllint --xpath 'string(td[@data-title="Date"])' -)
  # 提取当前行的Version(<a>标签的文本内容)
  current_version=$(echo "$tr_node" | xmllint --xpath 'string(td[@data-title="Version"]/a)' -)
  # 输出CSV行(如果字段含逗号/引号,可改成"\"$current_date\",\"$current_version\"")
  echo "$current_date,$current_version"
done

小提示

如果你的字段里包含逗号、双引号这类CSV特殊字符,记得把输出的字段用双引号包裹,比如把echo "$current_date,$current_version"改成echo "\"$current_date\",\"$current_version\"",这样生成的CSV能被Excel、Numbers等工具正确解析。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.26 09:14:09