5

像这样在整个 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" />

...?

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

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

在这种情况下,我将不得不使用像 xsle 这样的库,因为我使用的是 xslt1。

或者有没有其他解决方案?

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

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

2 回答 2

2

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

于 2012-06-13T10:59:36.423 回答
1

就我个人而言,当我使用它时,为了方便起见,我总是把它放在一个变量中,或者得到我需要的值,只是为了让它更容易阅读。使用我上次使用的 MSXSL,我可以将它放在节点树中并以这种方式访问​​它。

我无法想象 XSL 处理器不会以某种方式缓存同一个文件,但我怀疑它对于所有处理器都是不同的,而且它似乎没有被写下来。

如果我想知道我正在使用的处理器,我只需复制并粘贴一个大文档并将其计时作为测试,这不会花很长时间,这是确保您的系统的唯一方法。

于 2012-06-13T08:46:41.573 回答