在标记后将 XML 文件拆分为块



我有一个 ~1GB 大的 XML 文件,带有

grep -c "</record>')," file
238613 

我想将其拆分为 1000 条记录的块,但每个文件都需要以

</record>'),   

然后我最终会得到 238 个文件。

以下是包含前两条记录的实际文件:

set bib_tag '''IMPORT CONCERTO'''
INSERT INTO marcxml_import (tag, marc) VALUES
(:bib_tag,'<record xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
<datafield and subfield data>
</record>'),
(:bib_tag,'<record xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
<datafield and subfield data>
</record>'),

您应该使用支持 XML 解析的语言或程序。您可以在以下列表中选择其中之一:

Perl,Python,Ruby,PHP-cli(例如SimpleXMLElement和Xpath),xmllint等

应避免使用正则表达式来执行该任务。

下面是一个将 php shell 脚本与 Xpath 查询一起使用的示例 https://stackoverflow.com/a/20940216/2900196:

您可以编写一个小的 XSLT 脚本来拆分文件。

使用模板、for-each 循环和结果文档就足够了。

使用 gnu awk

awk '{print $0 RS >NR ".xml"}' RS="</record>')," file

运行后,您应该获得几个 xml(或数百个)

cat 1.xml
set bib_tag '''IMPORT CONCERTO'''
INSERT INTO marcxml_import (tag, marc) VALUES
(:bib_tag,'<record xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
<datafield and subfield data>
</record>'),

至少在Mac上,您只需使用split命令即可拆分文件:

split -p "</record>')," file bib_snippet_

模式的 -p 参数

更新:由于您需要文件以"..记录..."您需要在此方法中自己手动添加以下内容:

for f in `ls bib_snippet_*` ; do cat "</record>')," >> $f ; done

相关内容

  • 没有找到相关文章

最新更新