我有一个100+;MB XML文件(SAN DTD/Schema)。XSLT将赢得';我没有。转换/解析的策略?
这个XML文件包含去年全年的存档新闻。我被要求按故事类别将这些故事分类为新的XML文件我有一个100+;MB XML文件(SAN DTD/Schema)。XSLT将赢得';我没有。转换/解析的策略?,xml,xslt,parsing,Xml,Xslt,Parsing,这个XML文件包含去年全年的存档新闻。我被要求按故事类别将这些故事分类为新的XML文件 big_story_export.xml 变成 lifestyles.xml food.xml nascar.xml ……等等 我使用一次性python脚本完成了这项工作,然而,我最初尝试使用XSLT来完成这项工作。这导致了我的XPATH选择在床上拉屎时的挫败感。测试文件进行了完美的转换,但将大文件放在我的样式表上,结果……什么都没有 您推荐什么策略来确保这样的文件将通过XSLT运行?这是一个供应商交给我
big_story_export.xml
变成
lifestyles.xml
food.xml
nascar.xml
……等等
我使用一次性python脚本完成了这项工作,然而,我最初尝试使用XSLT来完成这项工作。这导致了我的XPATH选择在床上拉屎时的挫败感。测试文件进行了完美的转换,但将大文件放在我的样式表上,结果……什么都没有
您推荐什么策略来确保这样的文件将通过XSLT运行?这是一个供应商交给我的,所以想象一下,在定义这个文件的结构时,我没有太多的杠杆作用
如果你们想要代码样本,我会把它们放在一起
如果有什么不同的话,我会对一些让XML+XSLT顺利工作的技巧感到满意
@斯克利夫兹 我使用python的libxml2和libxslt来处理这个问题。我现在正在研究xsltproc 对于这些一次性情况,它似乎是一个很好的工具。谢谢
@棘突薯蓣 它的形式很好,尽管(如前所述)我没有能力发现它的有效性 至于写模式,我喜欢这个想法 如果这是一次性的,那么我花在验证这一个文件上的时间将是不切实际的,尽管我预计必须从我们的供应商那里处理更多这样的文件
编写一个模式(并将其提交给供应商)对于像这样管理XMLFunk是一个很好的长期策略。谢谢 您使用的是什么语言/解析器?
对于大文件,我尝试使用Unix命令行工具。
它们通常比其他解决方案效率更高,而且不会在大文件上“浪费”
尝试使用
xsltproc
您使用的是什么语言/解析器?对于大文件,我尝试使用Unix命令行工具。
它们通常比其他解决方案效率更高,而且不会在大文件上“浪费”
尝试使用
xsltproc
这听起来像是大型XML文件或XSLT处理器中的错误。有两件事你应该检查你的档案
如果文件格式正确且有效,但XSLT处理器仍然拒绝提供预期的结果,则可以确定问题出在处理器上,您应该尝试另一个问题。这听起来像是大型XML文件或XSLT处理器中的错误。有两件事你应该检查你的档案
如果文件格式正确且有效,但XSLT处理器仍然拒绝提供您期望的结果,您可以确定问题出在处理器上,您应该尝试另一个问题。我可以推荐Saxon XSLT处理器吗?我知道它可以处理大文件,只要给Java JVM足够的内存
另一件事是,您的XSLT中可能有一些优化可以帮助您,但很难对这类事情做出笼统的陈述。我可以推荐Saxon XSLT处理器吗?我知道,如果您给Java JVM足够的内存,它可以处理大文件
另一件事是,您的XSLT中可能有一些优化,这可能会有所帮助,但很难对类似的事情做出笼统的陈述。使用XSLT处理任意大的XML文档的问题是,XSLT处理从将输入文档解析到源代码树开始。此树被解析到内存中。这意味着您最终将遇到一个大到足以导致问题的输入文档,即使您使用的是像Saxon这样的健壮XSLT处理器,并且您有大量的虚拟内存。(它可能仍能工作,但速度会很慢。) 不使用XSLT的另一个原因是您正在生成多个输出文档,这(根据您到目前为止所说的)意味着您正在对输入文档进行多次传递
采用基于SAX的方法而不是使用XSLT可能会更好(取决于许多我不知道的关于您的情况的因素)。使用SAX处理器,您可能可以编写一个方法,使单个仅向前传递的文件通过源文档,并在执行时对其进行解析,并在遇到包含它们的元素时写入所有输出文档。使用XSLT处理任意大的XML文档的问题是XSLT处理从将输入文档解析到源树开始。此树被解析到内存中。这意味着您最终将遇到一个大到足以导致问题的输入文档,即使您使用的是像Saxon这样的健壮XSLT处理器,并且您有大量的虚拟内存。(它可能仍能工作,但速度会很慢。) 不使用XSLT的另一个原因是,您正在生成多个输出文档,这(根据您到目前为止所说的)意味着您需要