我正在处理处理 clip 元素的XSLT代码,该元素通常包含 video 元素。
<clip name="..." ...>
<video path="..." ..>
...
</video>
</clip>
在某些情况下, video 元素不存在,这是一个问题,因为它处理的是复杂的视频处理模板。但是, video 标记(如果存在)通常很简单,并且很容易检索其数据。然后,我可以创建简单的视频元素,而不是在其上应用视频模板。
是否可以使用XSLT执行此操作?
由于
答案 0 :(得分:2)
是的,您可以在变量中创建临时节点:
<xsl:variable name="temp">
<video>
<xsl:for-each select="something"/>
<details/>
</xsl:for-each>
</video>
</xsl:variable>
在XSLT 2.0中,您可以直接处理:
<xsl:apply-templates select="$temp"/>
在1.0中存在一个小故障,即变量包含结果树片段而不是节点集。几乎所有的XSLT 1.0处理器都提供了一个函数exslt:node-set()来从一个转换为另一个:
<xsl:apply-templates select="exslt:node-set($temp)"/>
(但我只是重新阅读了你问题的标题。你实际上无法将这个临时节点添加到输入XML中:输入XML是不可变的。)