XSLT-如何将一个文档中的节点保存到另一个临时文档中,然后在以后检索它?

XSLT-如何将一个文档中的节点保存到另一个临时文档中,然后在以后检索它?,xslt,Xslt,这并不是我想要做的,但这只是我需要的功能的一个简单例子。我想在一个文档中的处理节点和在原始文档处理过程中创建的临时文档中的处理节点之间切换。为此,我想将一个节点从原始文档“保存”到临时文档中,这样我就可以返回到它。我可以轻松地将节点本身“保存”到temp文档中,但是作为temp文档的一部分,我不能再做类似于测试另一个节点是否是原始文档中该节点的祖先的事情 我可以想象使用generateid来实现这一点。我不会保存节点本身,而是保存一个id,然后使用该id返回原始文档中的节点。这种方法的问题是,我

这并不是我想要做的,但这只是我需要的功能的一个简单例子。我想在一个文档中的处理节点和在原始文档处理过程中创建的临时文档中的处理节点之间切换。为此,我想将一个节点从原始文档“保存”到临时文档中,这样我就可以返回到它。我可以轻松地将节点本身“保存”到temp文档中,但是作为temp文档的一部分,我不能再做类似于测试另一个节点是否是原始文档中该节点的祖先的事情

我可以想象使用generateid来实现这一点。我不会保存节点本身,而是保存一个id,然后使用该id返回原始文档中的节点。这种方法的问题是,我不能请求生成id为某某的节点。我可以遍历树并找到它,但我正在寻找一种更简单、更快的访问方法

有人存在吗


提前感谢。

通过其
生成-id()为每个感兴趣的节点编制索引。

 <xsl:key name="kNodeById" match="node()"
  use="generate-id()"/>
key('kNodeById', $vId)

使用XSLT2.0,您当然可以创建临时树作为变量值,然后对它们应用XPath。对于XSLT1.0,有一个限制,即临时树是结果树片段,要对其应用XPath,首先需要应用扩展函数,如exsl:node set,例如,
generate-id()将不能跨不同的XML工作,因为每次处理XML时,这些id都是不同的!我建议您尽可能多地将原始XML复制到临时文档中,并在感兴趣的节点中/之后/之前放置某种标记(属性或附加节点)。“以后您可以删除这个标记。@Martin我还考虑过XSLT2.0。感谢XSLT 1.0的节点集技巧(不知道这一点)。您可以实现一个类似
generate-id()
-的函数,该函数根据节点的名称和内容生成标识符。你可以在这里看到一些实际的例子。好问题,+1。请参阅我的答案,以获得使用键的便捷解决方案。@empo:我不理解您的问题,您似乎也不理解OP的问题。没有人比较不同文档中节点的generate-id-s。这可能就是我问的原因you@empo:
key()
函数可用于当前文档。只需更改当前文档,然后使用
key()
函数即可。