这是做什么的? <xsl:apply-templates select =“。”>和<xsl:apply-templates select =“* | @ *”> </xsl:apply-templates> </xsl:apply-templates>

时间:2012-11-26 00:04:23

标签: xslt xslt-2.0

我是XSL的新手,我对以下几段代码中的选择将会选择感到困惑。

<xsl:apply-templates select="."/>

<xsl:apply-templates select="*|@*"/>

有什么想法吗? 感谢

2 个答案:

答案 0 :(得分:9)

查看Abbreviated Syntax section of XPath 2.0

<xsl:apply-templates select="."/>示例中,.评估为context item。在大多数情况下,这与当前正在处理的节点相同。所以这个例子将选择上下文节点。

<xsl:apply-templates select="*|@*"/>示例中,*将选择上下文节点的所有子元素。 @*将选择上下文节点的所有属性。 |union operator。因此,此示例将选择上下文节点的所有子元素以及上下文节点的所有属性。

<xsl:apply-templates select="."/>经常用于将进一步处理应用于上下文节点。

<xsl:apply-templates select="*|@*"/>经常用于处理当前节点及其属性的所有子元素。它经常在您处理元素并希望将其子元素/属性移交给任何其他适用的模板时使用。

答案 1 :(得分:2)

<xsl:apply-templates select="."/>

处理当前节点的内容!点.表示内容..如果当前节点没有子节点但是有数据(例如:<foo>Sample Data</foo>)则解析器处理数据Sample Data

<xsl:apply-templates select="@*|*"/>

处理属性和子节点或当前节点下的数据。差异是......这个处理上下文节点的所有属性..

我使用单词process代替copy,因为.. apply-templatecopy-ofvalue-of不同,评估其他模板,例如上面的代码如果我还有一个模板,如下所示:

  <xsl:template match="text()[.='Sample Data']"/> 

然后它会从输出XML中删除文本。 copy-of select="node_name"value-of select="node-name"在哪里复制数据,尽管我们的XSL文件中有此模板..