xml - xmlstarlet 提取以不同值重复的子 HTML 元素的值
问题描述
目的: 使用 xmlstarlet 提取子 HTML 元素的值,这些元素以不同的值重复并导出为 CSV
数据:
<?xml version="1.0" encoding="UTF-8"?>
<Library export_date="2020-01-15">
<Book id="1001">
<Title>Book 1</Title>
<Date value="2019-05-16"/>
<Author value="Name 1"/>
<Author value="Name 2"/>
<Author value="Name 3"/>
<Author value="Name 4"/>
<Author value="Name 5"/>
<Author value="Name 6"/>
<Author value="Name 7"/>
<Author value="Name 8"/>
<Author value="Name 9"/>
<Author value="Name 10"/>
<Author value="Name 11"/>
<Author value="Name 12"/>
<Author value="Name 13"/>
</Book>
</Library>
试图:
xmlstarlet \
sel -T -t -m /Library/Book \
-v "concat('"','Title','","',Author/@value,'"')" \
-n library_books.xml \
> output.csv
# Remove xmlstarlet quotation bypass, convert to actual quotation
sed -i .bak 's|"|\"|g' output.csv
CSV 输出:
"Title","Name 1"
所需的 CSV 输出:
"Title","Name 1; Name 2; Name 3; Name 4; Name 5; Name 6; Name 7; Name 8; Name 9; Name 10; Name 11; Name 12; Name 13"
替代 CSV 所需输出(新行上的值):
"Title","Name 1
Name 2
Name 3
Name 4
Name 5
Name 6
Name 7
Name 8
Name 9
Name 10
Name 11
Name 12
Name 13"
解决方案
在你的系统上试试这个:
xmlstarlet sel -t -v "concat('Title: ',//Title, ' ')" -n -v "//Author/@value" min_library_books.xml > output.csv
我的输出是你的第二个选择。
推荐阅读
- laravel - 如何在信使系统的雄辩查询 JSON 输出中识别经过身份验证的用户?
- c# - 不了解如何在 Gremlin.net 中使用 Tree()
- mips - MIPS 阶乘计算器返回长数可能是寄存器号?
- unit-testing - Golang unittest http 处理程序
- angular - 使用 Angular 6 Table/Grid 和 web api 的服务器端分页
- java - 以递归方式打印 (char) A 到 (n)
- vba - VBA 可以访问 Word 文档中 settings.xml.res 中的数据吗?
- pyspark - Pyspark 半正弦距离
- mql5 - MQL5 - 传递指标作为参数
- ubuntu - Gitlab 导出:找不到 Gemfile 或 .bundle / 目录