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

Cri*_*sty 3 xslt xslt-2.0

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

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

<xsl:apply-templates select="*|@*"/>
Run Code Online (Sandbox Code Playgroud)

有任何想法吗?谢谢

小智 10

查看XPath 2.0缩写语法部分.

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

在该<xsl:apply-templates select="*|@*"/>示例中,*将选择上下文节点的所有子元素.@*将选择上下文节点的所有属性.|工会运营商.因此,此示例将选择上下文节点的所有子元素以及上下文节点的所有属性.

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

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


Inf*_*nd' 5

<xsl:apply-templates select="."/>
Run Code Online (Sandbox Code Playgroud)

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

<xsl:apply-templates select="@*|*"/>
Run Code Online (Sandbox Code Playgroud)

处理属性和子节点或当前节点下的数据..区别在于..这个处理上下文节点的所有属性..

我使用这个词process而不是copy,因为 ..与其他模板apply-template不同copy-ofvalue-of评估其他模板,例如,如果我还有一个如下所示的模板,则与上面的代码一起使用:

  <xsl:template match="text()[.='Sample Data']"/> 
Run Code Online (Sandbox Code Playgroud)

然后它会从输出 XML 中删除文本。copy-of select="node_name"尽管是我们的 XSL 文件中的此模板,但仍将value-of select="node-name"数据复制到何处。