在xslt中重复使用document()时的性能

Pet*_*ter 5 xslt

是否可以在xslt文件中调用相同的文档,如下所示:

<xsl:value-of select="document('doc.xml')/root/bar/foo1" />
<xsl:value-of select="document('doc.xml')/root/bar/foo2" />
<xsl:value-of select="document('doc.xml')/root/bar/foo3" />
Run Code Online (Sandbox Code Playgroud)

...?

我可以想象缓存可以避免产生一次又一次地读取文件的开销.

或者我应该将doc.xm存储在变量中并使用该变量进行查询?

在这种情况下,我将不得不使用某种类型的库,如xsle,因为我使用的是xslt1.

或者还有其他解决方案吗?

注意:XPath的某些部分应该是动态的:

<xsl:value-of select="document('doc.xml')/root/*[name()=$lang]/foo3" />
Run Code Online (Sandbox Code Playgroud)

Mic*_*Kay 2

XSLT 处理器需要确保如果使用相同的 URL 调用 document() 两次,则返回的节点在 count(document('a.xml')|document('a'xml')) = 1 的意义上是相同的如果不缓存文档,很难满足这个要求,所以我认为你可以合理地确定每个文档只会被获取和解析一次。但是,将其放入全局变量永远不会有任何害处。