我对XSL非常陌生,我对以下代码中的select将选择什么感到困惑。
<xsl:apply-templates select="."/>
<xsl:apply-templates select="*|@*"/>有什么想法吗?谢谢
发布于 2012-11-26 08:38:02
查看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="*|@*"/>通常用于处理当前节点及其属性的所有子元素。当您处理完一个元素并希望将其子元素/属性传递给任何其他适用的模板时,通常会使用它。
发布于 2012-11-26 13:30:53
<xsl:apply-templates select="."/>处理当前节点的内容!点.表示内容..如果当前节点没有子节点,但有数据(例如:<foo>Sample Data</foo>),那么解析器将处理数据Sample Data
<xsl:apply-templates select="@*|*"/>处理当前节点下的属性和子节点或数据。不同的是..这个节点负责上下文节点的所有属性。
我用process代替copy,因为..与copy-of和value-of不同的是,apply-template会评估其他模板,例如,如果我还有一个模板,则还会计算上面的代码,如下所示:
<xsl:template match="text()[.='Sample Data']"/> 然后,它将从您的输出XML中删除文本。其中as copy-of select="node_name"和value-of select="node-name"复制数据,尽管在我们的XSL文件中存在此模板。
https://stackoverflow.com/questions/13556967
复制相似问题