gpt4 book ai didi

xml - 声明式查询大型 XML 文件/流

转载 作者:数据小太阳 更新时间:2023-10-29 02:42:18 24 4
gpt4 key购买 nike

这里是在黑暗中拍摄的,但是是否有任何库或工具可用于声明式查询大型(>> 内存)XML 文件(以流方式)?

为了说明我想要做什么:维基百科 XML 转储看起来像:

...
<page>
<title>AccessibleComputing</title>
<id>10</id>
<redirect />
<revision>
<id>233192</id>
<timestamp>2001-01-21T02:12:21Z</timestamp>
<contributor>
<username>RoseParks</username>
<id>99</id>
</contributor>
<comment>*</comment>
<text id="233192" bytes="124" />
</revision>
<revision>
<id>862220</id>
<timestamp>2002-02-25T15:43:11Z</timestamp>
<contributor>
<ip>Conversion script</ip>
</contributor>
<minor/>
<comment>Automated conversion</comment>
<text id="862220" bytes="35" />
</revision>
...

我想将其转换为 CSV,以便我可以导入 Postgresql 进行进一步分析:

revisionid,pageid,username,userid,textsize
233192,10,RoseParks,99,124
...

如果我能按照这些思路做一些事情(重新利用 XPath/XQuery 语法),那就太棒了:

for $p in /page
for $r in $p/revision[contributor/username]
return $r/id/text(),
$p/id/text(),
$r/contributor/username/text(),
$r/contributor/id/text(),
$r/text/@bytes

这些类型的查询应该只占用常量内存(对于固定深度的 XML),基本上只需要保留一堆元素。

我尝试了一些 XQuery/XSLT 实现,包括 Saxon 和 Galax,但它们都让我内存犹新。

目前我只是在编写一个 SAX 事件解析器,但是维护我们正在遍历的节点堆栈并重新实现 XPath 可以轻松完成的工作和诸如此类的事情(尤其是对于比这个维基百科示例更复杂的文件)是很乏味的,所以我'我正在考虑编写一个更通用的库,我很好奇它是否已经存在。

最佳答案

您可以尝试使用 StAX 库而不是 SAX。StAX 是一个拉式库,而不是推式库,因此它更容易跟踪状态。虽然它不是 xquery。

您可能还对 xmlsh 中的 StaX 支持感兴趣,它非常高效但比直接用 Java 编写要容易得多(代码编写更少)。

http://www.xmlsh.org/FunctionsStAX

关于xml - 声明式查询大型 XML 文件/流,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7118910/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com