XSL xsl:template match =“/”

时间:2010-06-27 10:46:53

标签: xml xslt

我只是学习XML以及如何使用XSL文件。 在XSL文件中,我发现了以下术语:

xsl:template match="/"

这代表什么? 我可以使用什么而不是/? 我可以写table或任何其他HTML标记而不是/吗?

3 个答案:

答案 0 :(得分:118)

match指令的<xsl:template>属性的值必须是匹配模式

匹配模式构成所有可能的XPath表达式集合的子集。第一个自然的限制是匹配模式必须选择一组节点。还有其他限制。特别是,在位置步骤中不允许使用反向轴(但可以在谓词中指定)。此外,XSLT 1.0中不允许使用变量或参数引用,但在XSLT 2.x中使用这些引用是合法的。

XPath中的

/表示 root 或文档节点。在XPath 2.0(以及XSLT 2.x)中,这也可以写成document-node()

匹配模式可以包含// abbreviation

匹配模式示例:

<xsl:template match="table">

可以应用于名为table的任何元素。

<xsl:template match="x/y">

可以应用于名为y的任何元素,其父元素是名为x的元素。

<xsl:template match="*">

可以应用于任何元素。

<xsl:template match="/*">

只能应用于XML文档的顶部元素。

<xsl:template match="@*">

可以应用于任何属性。

<xsl:template match="text()">

可以应用于任何文本节点。

<xsl:template match="comment()">

可以应用于任何评论节点。

<xsl:template match="processing-instruction()">

可以应用于任何处理指令节点。

<xsl:template match="node()">

可以应用于任何节点:元素,文本,注释或处理指令。

答案 1 :(得分:39)

值得注意的是,因为对XML新手来说很困惑,XML文档的根(或文档节点)不是顶级元素。它是顶级元素的父级。这很令人困惑,因为顶层元素似乎不具有父级。这不是顶级吗?

但是看看这个格式良好的XML文档:

<?xml-stylesheet href="my_transform.xsl" type="text/xsl"?>
<!-- Comments and processing instructions are XML nodes too, remember. -->
<TopLevelElement/>

本文档的根目录有三个子句:处理指令,注释和元素。

因此,例如,如果您想编写一个删除该注释的转换,但留在文档中任何其他位置出现的任何注释中,您可以将其添加到身份转换中:

<xsl:template match="/comment()"/>

更简单(也更常用),这里的XPath模式与文档的顶级元素相匹配,无论其名称如何:/*

答案 2 :(得分:8)

match属性指示将应用模板转换的部分。在该特定情况下,“/”表示xml文档的根。您必须在match属性中提供的值应该是XPath表达式。 XPath是您必须用来引用目标xml文件的特定部分的语言。

要了解您可以将哪些内容放入match属性,您需要了解xpath是什么以及如何使用它。我建议你看看我在答案底部为你提供的链接。

  

我能写“桌子”还是其他任何东西   html标签而不是“/”?

是的,你可以。但这取决于你究竟想要做什么。如果您的目标xml文件包含HMTL元素,并且您要对它们应用此xsl:template,则使用table,div或anithing else是有意义的。

这里有一些链接: