我是XSL的新手,我对以下几段代码中的选择将会选择感到困惑.
<xsl:apply-templates select="."/>
<xsl:apply-templates select="*|@*"/>
Run Code Online (Sandbox Code Playgroud)
有任何想法吗?谢谢
小智 10
在<xsl:apply-templates select="."/>示例中,.计算上下文项.在大多数情况下,这与当前正在处理的节点相同.所以这个例子将选择上下文节点.
在该<xsl:apply-templates select="*|@*"/>示例中,*将选择上下文节点的所有子元素.@*将选择上下文节点的所有属性.|是工会运营商.因此,此示例将选择上下文节点的所有子元素以及上下文节点的所有属性.
<xsl:apply-templates select="."/> 经常用于将进一步处理应用于上下文节点.
<xsl:apply-templates select="*|@*"/>经常用于处理当前节点及其属性的所有子元素.当您处理完一个元素并希望将其子元素/属性移交给任何其他适用的模板时,通常会使用它.
<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-of并value-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"数据复制到何处。