我对 XSL 很陌生,我对以下代码中的选择将选择什么感到困惑。
<xsl:apply-templates select="."/>
<xsl:apply-templates select="*|@*"/>
有任何想法吗?谢谢
查看XPath 2.0 的 Abbreviated Syntax 部分。
在<xsl:apply-templates select="."/>
示例中,.
评估为上下文 item。在大多数情况下,这与当前正在处理的节点相同。所以这个例子将选择上下文节点。
在<xsl:apply-templates select="*|@*"/>
示例中,*
将选择上下文节点的所有子元素。@*
将选择上下文节点的所有属性。|
是联合运算符。所以这个例子将选择上下文节点的所有子元素以及上下文节点的所有属性。
<xsl:apply-templates select="."/>
经常用于对上下文节点进行进一步处理。
<xsl:apply-templates select="*|@*"/>
常用于处理当前节点的所有子元素及其属性。当您处理完一个元素并希望将其子元素/属性交给任何其他适用的模板时,通常会使用它。
<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"
尽管在我们的 XSL 文件中是这个模板,但在哪里value-of select="node-name"
复制数据..