#xml #xml-data #convert #csv #text #memory #file

app anglosaxon

使用流式SAX解析器将XML文件转换为文本

3个版本

0.1.1 2022年9月3日
0.1.0 2022年1月16日

#2890解析实现

每月30次下载

AGPL-3.0+

60KB
785

anglosaxon - 将大型XML文件转换为其他格式

Crates.io

anglosaxon是一个命令行工具,用于使用SAX解析XML文件。您可以将XML文件以流式格式转换为其他文本格式。由于它使用SAX,它不会在处理之前将整个XML文件加载到内存中,因此它可以处理大型XML文件,例如一些OpenStreetMap数据转储文件。

示例用法

bzcat ~/osm/data/changeset-examples.osm.bz2  | anglosaxon -S -o changeset_id,tag_key,tag_value --nl -s tag -v ../id -o,  -v k -o , -v v --nl

此操作将OSM更改集转储文件转换为CSV文件,包含changeset_idchangeset_tag_keychangeset_tag_value,允许您使用标准Unix工具分析OSM更改集。截至2022年1月,更改集文件为4GB bzip2压缩(40+GB未压缩XML),对于基于DOM的工具来说太大。

安装

cargo install anglosaxon

文档

anglosaxon从stdin读取xml文件并写入stdout。

输出由CLI标志控制。指定SAX事件使用-S/-s/-e/-E,然后指定一个或多个对事件执行的操作。与大多数CLI程序不同,标志的顺序很重要。

SAX事件

  • -S/--startdoc:在XML文档开始时发生
  • -s TAG/--start TAG:当TAG打开时发生,即标签的开始。此标签上的XML属性可用
  • -e TAG/--end TAG:当TAG关闭时发生,即标签的结束
  • -E/--end:在XML文档结束时发生

XML标签名是简单的字符串。

要执行的操作

可以指定一个或多个操作,并按照您给出的顺序处理。

  • -o TEXT:按照原样打印TEXT
  • --nl:打印一个换行符
  • --tab:打印一个制表符
  • -v ATTRIBUTE:打印这个XML属性的值。如果标签没有该属性,将发生错误
  • -V ATTRIBUTE DEFAULT:打印这个XML属性的值,如果该属性不存在,则打印DEFAULT

XML属性是纯文本。父节点的属性通过../ATTRIBUTE指定(例如,../../id是当前XML节点父节点的父节点的id属性)。如果所需的父节点不存在,将发生错误。

类似项目

  • xmlstarletsel/selection功能是灵感来源。但它无法处理大型XML

依赖关系

~2MB
~31K SLoC