64

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

xsl:template match="/"

这代表什么?我可以用什么代替/?我可以写table或任何其他 HTML 标记来代替/吗?

4

3 回答 3

133

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

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

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

匹配模式可以包含//缩写

匹配模式示例:

<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()">

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

于 2010-06-27T16:10:29.503 回答
47

值得注意的是,由于 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 模式,无论其名称如何 /*

于 2010-06-28T16:20:19.253 回答
11

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

要有意义地了解您可以在 match 属性中添加的其他内容,您需要了解 Xpath 是什么以及如何使用它。我建议您查看我在答案底部为您提供的链接。

我可以写table或任何其他html标签来代替 " /" 吗?

是的你可以。但这取决于您到底要做什么。如果您的目标 xml 文件包含 HTML 元素并且您尝试将其应用于它们,那么使用或其他任何东西xsl:template都是有意义的。tablediv

这里有几个链接:

于 2010-06-27T10:54:13.583 回答