XSLT:在输入XML中创建临时节点

时间:2016-12-16 20:40:28

标签: xslt xslt-1.0

我正在处理处理 clip 元素的XSLT代码,该元素通常包含 video 元素。

<clip name="..." ...>
  <video path="..." ..>
     ...
  </video>
</clip>

在某些情况下, video 元素不存在,这是一个问题,因为它处理的是复杂的视频处理模板。但是, video 标记(如果存在)通常很简单,并且很容易检索其数据。然后,我可以创建简单的视频元素,而不是在其上应用视频模板。

是否可以使用XSLT执行此操作?

由于

1 个答案:

答案 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是不可变的。)