XSL xsl:template match =“/”

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了XSL xsl:template match =“/”相关的知识,希望对你有一定的参考价值。

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

xsl:template match="/"

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

答案

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

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

XPath中的/表示根节点或文档节点。在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()">

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

另一答案

值得注意的是,因为对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模式与文档的顶级元素相匹配,无论其名称如何:/*

另一答案

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

要获得有意义的理解,您可以将其放入match属性中,您需要了解xpath是什么以及如何使用它。我建议你看看我在答案底部为你提供的链接。

我可以写“table”或任何其他html标签而不是“/”吗?

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

这里有几个链接:

以上是关于XSL xsl:template match =“/”的主要内容,如果未能解决你的问题,请参考以下文章

ui-template

关于xls的一点笔记

XSL 递归调用 - xsl:functions vs xsl:template with call template

XSLT3 未命名的 xsl:mode on-no-match 行为是不是应该应用于没有模式匹配但模式在应用模板上指定的元素?

只有 name 属性的 xsl:template 和 xsl:function 有啥区别

xsl:apply-templates 模板的应用