我想获取我从 XML 文件中检索的项目列表。我正在使用 sed 清理 XML,最终得到如下输出:
CountofMonteCristo.zip
English.
http://www.archive.org/download/count_monte_cristo_0711_librivox/count_monte_cristo_0711_librivox_64kb_mp3.zip
Alexandre.
Dumas.
LettersofTwoBrides.zip
English.
http://www.archive.org/download/letters_brides_0709_librivox/letters_brides_0709_librivox_64kb_mp3.zip
Honoréde.
Balzac.
BleakHouse.zip
English.
http://www.archive.org/download/bleak_house_cl_librivox/bleak_house_cl_librivox_64kb_mp3.zip
Charles.
Dickens.
我想使用 wget -i 将这些文件下载为 Language.Lastname.Firstname.Title.zip
我愿意以某种方式重新排列文件,以便我可以使用 $filename $url
我尝试了一些不同的 sed 命令。Sed 是我用来清理 XML 标记的工具,但我不知道如何将文本移动到适当的位置。每个文件的标题、名称和语言会有所不同。
编辑:在使用 sed 清理标签之前,每一行都包含在标签中,例如 English 和 FileTitle。我认为这可能有助于识别模式以重新安排事物。
EDIT2:这是XML 源代码
EDIT3:像这样的东西看起来会起作用,但我无法修改它以满足我的需要。
我的最终目标是将所有文件组织到文件夹中,其层次结构为 Language -> AuthorLastnameFirstname -> Files.zip
如果我所做的不是最佳实践,我愿意接受其他方法。
谢谢
我会建议你不要使用
bash
或sed
等!并采用python方式,这绝对是一种更好的方式来解析你需要解析的xml。我刚刚用 python3.6 编写并测试了它,它完全符合您的要求。您可以将其保存到文件中,也可以将其粘贴/键入到 python3 解释器 cli 中,这取决于您。
您需要使用 pip 或 easy_install 等安装python3-wget和beautifulsoup4 。
如果可以使用,Librivox API 还提供 JSON 输出,使用适当的 XML 工具
jq
解析 JSON 可能比解析 XML 更容易。jq
给出如下输出:
之后,使用起来相对简单
xargs
:其中
xargs
使用两行作为参数wget
,第一行成为-O
选项参数,第二行成为 URL。虽然我会推荐像 Jamie's 这样的基于 Python 的解决方案,除了使用 JSON 和 Python 的内置 JSON 功能而不是 bs4。
蛮力。
如果您解析的 xml 在
books
只需将您的行重新组合为变量,只要您的记录块填充到 5 行,您就可以继续使用。