这个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来说是一个很好的长期策略.谢谢!
使用XSLT处理任意大型XML文档的问题是XSLT处理首先将输入文档解析为源树.该树被解析到内存中.这意味着即使你使用像Saxon这样强大的XSLT处理器并且你有足够的虚拟内存,你最终也会遇到一个足够大的输入文档.(它可能仍然有效,但它会很慢.)
不使用XSLT的另一个原因是你要生成多个输出文档,这些文档(基于你到目前为止所说的)意味着你要对输入文档进行多次传递.
它可能(取决于很多我不了解的情况因素)采用基于SAX的方法而不是使用XSLT.使用SAX处理器,您可以编写一种方法,该方法只进行单个,仅向前传递源文档,在进行时对其进行解析,并在遇到包含它们的元素时写入所有输出文档.