Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/xslt/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
当只需要对XML进行微不足道的更改时使用XSLT_Xml_Xslt - Fatal编程技术网

当只需要对XML进行微不足道的更改时使用XSLT

当只需要对XML进行微不足道的更改时使用XSLT,xml,xslt,Xml,Xslt,我有一个大小从50k到300k的XML,我需要对它进行一些转换。转换包括将一些元素移动到不同的位置,以及在不同元素的属性之间进行合并 据我所知,理想情况下,我应该使用XSLT来执行此转换,但我担心这会给构建输出XSL带来大量不必要的工作,因为与保持不变的数据量相比,所需的更改数量可以忽略不计 我的问题是: 您是否建议尝试仅使用DOM功能(我在.NET3.5中工作)和一些XPATH来完成这项工作?缺点是,如果所需更改的数量增加,可能会给代码增加不必要的复杂性 如果您仍然推荐XSLT,是否有某种方法

我有一个大小从50k到300k的XML,我需要对它进行一些转换。转换包括将一些元素移动到不同的位置,以及在不同元素的属性之间进行合并

据我所知,理想情况下,我应该使用XSLT来执行此转换,但我担心这会给构建输出XSL带来大量不必要的工作,因为与保持不变的数据量相比,所需的更改数量可以忽略不计

我的问题是:

  • 您是否建议尝试仅使用DOM功能(我在.NET3.5中工作)和一些XPATH来完成这项工作?缺点是,如果所需更改的数量增加,可能会给代码增加不必要的复杂性

  • 如果您仍然推荐XSLT,是否有某种方法可以直接从输入XML中复制块,而不是从头开始重新创建它们

  • 谢谢大家!

    好问题

    确实,当您只想对文档进行非常小的更改时,XSLT可能会非常昂贵。如果您想要进行大量迭代转换,那么成本尤其明显,这种情况有时发生在优化用例中,其中每个转换都会创建一个数据集,这是对前一个数据集的一个小小改进

    然而,在许多情况下,进行小转换的成本主要取决于解析和序列化成本(将词法XML转换为树并返回),因此其他也涉及解析和序列化的方法(例如DOM更新或XQuery更新)不会更好。所以在回答你的问题1时,我认为使用DOM不会更好。实现改进的唯一真正方法是使用XML数据库,这使得您可以避免解析和序列化成本,因为文档现在以树形式而不是词汇形式持久保存

    关于问题2,是的,您可以使用xsl:copy of原封不动地复制文档块,在任何像样的XSLT处理器上,这应该是非常有效的。当然,从源树复制到结果树的成本可能远低于构造源树所需的解析成本,或处理结果树所需的序列化成本。(当然,实际结果会因XSLT处理器的不同而不同。)

    这是一个很好的问题

    确实,当您只想对文档进行非常小的更改时,XSLT可能会非常昂贵。如果您想要进行大量迭代转换,那么成本尤其明显,这种情况有时发生在优化用例中,其中每个转换都会创建一个数据集,这是对前一个数据集的一个小小改进

    然而,在许多情况下,进行小转换的成本主要取决于解析和序列化成本(将词法XML转换为树并返回),因此其他也涉及解析和序列化的方法(例如DOM更新或XQuery更新)不会更好。所以在回答你的问题1时,我认为使用DOM不会更好。实现改进的唯一真正方法是使用XML数据库,这使得您可以避免解析和序列化成本,因为文档现在以树形式而不是词汇形式持久保存

    关于问题2,是的,您可以使用xsl:copy of原封不动地复制文档块,在任何像样的XSLT处理器上,这应该是非常有效的。当然,从源树复制到结果树的成本可能远低于构造源树所需的解析成本,或处理结果树所需的序列化成本。(当然,实际结果因XSLT处理器而异。)