我是XSL的新手,我对以下几段代码中的选择将会选择感到困惑。
<xsl:apply-templates select="."/>
<xsl:apply-templates select="*|@*"/>
有什么想法吗? 感谢
答案 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-template
与copy-of
和value-of
不同,评估其他模板,例如上面的代码如果我还有一个模板,如下所示:
<xsl:template match="text()[.='Sample Data']"/>
然后它会从输出XML中删除文本。 copy-of select="node_name"
和value-of select="node-name"
在哪里复制数据,尽管我们的XSL文件中有此模板..