我知道下面的问题有点初学者,但我需要你的帮助来理解一个基本概念。
我想首先说,我是 3 年的 XSLT 程序员,但我在这里学到了一些我从未知道的新的和非常基础的东西(在我的工作中,任何人都独自学习如何编程,没有类(class)涉及)。
我的问题是:xsl:sequence
的用途是什么? ?
我一直在用xsl:copy-of
为了按原样复制节点,xsl:apply-templates
为了修改我选择的节点和value-of
对于简单的文本。
我从来没有必要使用 xsl:sequence
.如果有人可以向我展示 xsl:sequence
的示例,我将不胜感激如果没有我上面提到的那些,则首选或无法实现的用法。
还有一件事,我已经阅读了 xsl:sequence
定义当然,但我无法推断它是如何有用的。
最佳答案
<xsl:sequence>
在原子值(或原子值序列)上与 <xsl:copy-of>
相同两者都只返回其输入的副本。当您考虑节点时,差异就会出现。
如果 $n 是单个元素节点,例如由类似的定义
<xsl:variable name="n" select="/html"/>
然后
<xsl:copy-of select="$n"/>
返回节点的副本,它具有相同的名称和子结构,但它是一个具有新标识的新节点(并且没有父节点)。
<xsl:sequence select="$n"/>
返回节点 $n,返回的节点与 $n 具有相同的父节点,并且通过
is
等于它Xpath 运算符。这种差异在传统(XSLT 1 样式)模板用法中几乎完全被掩盖了,因为您永远无法访问任一操作的结果,构造函数的结果被隐式复制到输出树中,因此事实
xsl:sequence
不会使副本被屏蔽。<xsl:template match="a">
<x>
<xsl:sequence select="$n"/>
</x>
</xsl:template>
是相同的
<xsl:template match="a">
<x>
<xsl:copy-of select="$n"/>
</x>
</xsl:template>
两者都创建一个新的元素节点并将内容的结果复制为新节点
x
的子节点.但是,如果您使用函数,很快就会看到差异。
<xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:f="data:,f">
<xsl:variable name="s">
<x>hello</x>
</xsl:variable>
<xsl:template name="main">
::
:: <xsl:value-of select="$s/x is f:s($s/x)"/>
:: <xsl:value-of select="$s/x is f:c($s/x)"/>
::
:: <xsl:value-of select="count(f:s($s/x)/..)"/>
:: <xsl:value-of select="count(f:c($s/x)/..)"/>
::
</xsl:template>
<xsl:function name="f:s">
<xsl:param name="x"/>
<xsl:sequence select="$x"/>
</xsl:function>
<xsl:function name="f:c">
<xsl:param name="x"/>
<xsl:copy-of select="$x"/>
</xsl:function>
</xsl:stylesheet>
生产
$ saxon9 -it main seq.xsl
<?xml version="1.0" encoding="UTF-8"?>
::
:: true
:: false
::
:: 1
:: 0
::
这里是
xsl:sequence
的结果和 xsl:copy-of
完全不同。
关于XSLT xsl :sequence. 它有什么用..?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14361629/