如何在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
相关产品推荐
相关产品推荐

