首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >msxsl:node-set()和exsl:node-set()函数哪个更好?

msxsl:node-set()和exsl:node-set()函数哪个更好?
EN

Stack Overflow用户
提问于 2014-04-01 15:33:27
回答 3查看 945关注 0票数 0

在XSLT转换期间,我遇到了性能和内存使用方面的大问题。我浏览了几个如何优化XSLT的页面,其中一个方法就是减少node-set()函数的使用。

我发现在msxslexsl中有两个节点集的功能。这些函数在性能和内存使用上有区别吗?

EN

回答 3

Stack Overflow用户

发布于 2014-04-01 16:43:58

纯XSLT 1.0不提供将结果树片段转换为节点集的方法,因此XSLT 1.0处理程序必须为该任务提供扩展函数。微软的MSXML处理器的不同版本在名称空间urn:schemas-microsoft-com:xslt中提供了一个本地名称node-set,文档和许多示例将该名称空间绑定到前缀msxsl,以便用法示例随后调用msxsl:node-set($rtf-var)。您可以使用任何其他前缀,但是,重要的是名称空间,并且MSXML只适用于名称空间urn:schemas-microsoft-com:xslt

据我所知,在.NET框架中,XslTransform类(现已过时)也只支持微软命名空间`urn:schemas-microsoft-com:xslt中的扩展函数node-set

然而,由于EXSLT原创在名称空间http://exslt.org/common中标准化了一个名为node-set的扩展函数,许多XSLT处理器现在都支持这个EXSLT扩展函数,通常称为exsl:node-set,但同样重要的是名称空间,而不是前缀。微软在.NET框架中的XslCompiledTransform支持node-set函数的两种扩展函数名称空间,因此您可以进行选择。在功能上没有区别,我也不知道有什么性能差别,我不认为有差别,因为我不能想象为什么不同的名字会导致不同的,更复杂的实现。

我宁愿考虑你的样式表需要什么样的兼容性,如果你想用.NET和MSXML运行它(例如在Internet Explorer内部),那么选择urn:schemas-microsoft-com:xslt命名空间,如果你想用.NET或者其他平台上的XSLT处理器运行它,那么EXSLT命名空间会给你提供更好的兼容性。

通过使用用JScript或VBScript编写的简单扩展函数脚本,甚至可以“说服”MSXML在EXSLT名称空间中支持node-set函数,但是这种方法可能会导致性能损失,因为XSLT处理器必须加载脚本引擎。

票数 1
EN

Stack Overflow用户

发布于 2014-04-01 17:11:19

您没有给出任何信息来说明为什么您认为node-set()函数与您的性能问题有关。事实上,您没有向我们提供关于您的转换的性质、您所做的性能测量或您正在使用的技术的任何信息。您所告诉我们的是,您已经在谷歌上搜索了性能问题的可能原因,并且正在探索其中一个原因。

你需要更加系统化。首先测量性能(时间和内存)如何随着数据大小的增加而变化;图表将告诉我们很多信息。使用诸如Saxon的-TP之类的分析工具来查看时间的去向。简单地测试性能随不同处理器的变化可能是有指导意义的。基本上,在你提出理论之前,你需要数据。

票数 1
EN

Stack Overflow用户

发布于 2014-04-01 16:09:37

我想知道您为什么要使用node-set…Taken from this 12 year old post

“如果您还没有猜到,XSLT 2.0已经为RTF打开了大门。现在,当您使用xsl:variable创建临时树时,该变量的值是一个真正的节点集。实际上,在XPath 2.0术语中,它是一个真正的节点序列,由一个文档节点组成,文档节点是XPath 2.0的名称,XPath 1.0称之为“根节点”。有了这个序列,您就可以使用路径表达式在树中向下钻取,对其应用模板,等等,就像处理任何其他源文档一样。在XSLT 2.0中,不再需要node-set()扩展函数。“

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/22779491

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档