当前位置:  开发笔记 > 编程语言 > 正文

我有一个100 + MB的XML文件(sans-DTD/Schema).XSLT不会拥有它.转换/解析的策略?

如何解决《我有一个100+MB的XML文件(sans-DTD/Schema).XSLT不会拥有它.转换/解析的策略?》经验,为你挑选了1个好方法。

这个XML文件包含了去年全年的归档新闻报道.我被要求按故事分类[y | ies]将这些故事分类为新的XML文件.

big_story_export.xml

变成

lifestyles.xml
food.xml
nascar.xml

...等等.

我使用一次性python脚本完成了工作,但是,我最初使用XSLT尝试了这个.这导致了沮丧,因为我的XPATH选择正在瘫痪床.测试文件被完美地转换,但是将大文件放在我的样式表上导致...... 没有.

您建议采取哪些策略来确保此类文件通过XSLT运行?这是由供应商交给我的,所以想象一下,在定义这个文件的结构时我没有太大的影响力.

如果你们想要代码样本,我会把它们放在一起.

如果有的话,我会对使XML + XSLT顺利合作的一些技巧感到满意.


@Sklivvz

我使用python的libxml2和libxslt来处理它.我现在正在研究xsltproc.

对于这些一次性情况来说,这似乎是一个很好的工具.谢谢!


@季奥米季斯,spinellis

尽管如此(如上所述)我没有能力去发现它的有效性.

至于编写Schema,我喜欢这个想法.

如果这是一次性的话,我投入一次验证这个文件的时间是不切实际的,尽管我预见必须从我们的供应商那里处理更多这样的文件.

编写模式(并将其提交给供应商)对于管理这样的XML funk来说是一个很好的长期策略.谢谢!



1> Robert Rossn..:

使用XSLT处理任意大型XML文档的问题是XSLT处理首先将输入文档解析为源树.该树被解析到内存中.这意味着即使你使用像Saxon这样强大的XSLT处理器并且你有足够的虚拟内存,你最终也会遇到一个足够大的输入文档.(它可能仍然有效,但它会很慢.)

不使用XSLT的另一个原因是你要生成多个输出文档,这些文档(基于你到目前为止所说的)意味着你要对输入文档进行多次传递.

它可能(取决于很多我不了解的情况因素)采用基于SAX的方法而不是使用XSLT.使用SAX处理器,您可以编写一种方法,该方法只进行单个,仅向前传递源文档,在进行时对其进行解析,并在遇到包含它们的元素时写入所有输出文档.

推荐阅读
刘美娥94662
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有