XSL xsl:template match =“/”
我只是学习XML和如何使用XSL文件。 在一个XSL文件中,我find了以下术语:
xsl:template match="/"
这是什么意思? 而我可以用什么来代替/
? 我可以写table
或任何其他HTML标签而不是/
?
<xsl:template>
指令的match
属性的值必须是匹配模式 。
匹配模式构成了所有可能的XPathexpression式集合的子集 。 首先,自然的限制是匹配模式必须select一组节点。 还有其他限制。 特别是在位置步骤中不允许有反向轴(但可以在谓词中指定)。 而且,在XSLT 1.0中不允许使用variables或参数引用,但在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()">
可以应用于任何节点:元素,文本,注释或处理指令。
值得注意的是,因为对于新来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模式,与名称无关: /*
。
匹配属性指示将要应用模板转换的部分。 在这种特殊情况下,“/”表示xml文档的根。 你必须提供给match属性的值应该是XPathexpression式。 XPath是您必须用来引用目标xml文件的特定部分的语言。
为了获得一个有意义的理解,你可以把什么你可以把匹配属性,你需要了解什么xpath是如何使用它。 我build议你看看我提供给你的答案底部的链接。
我可以写“表”或任何其他的HTML标签,而不是“/”?
是的你可以。 但这取决于你想要做什么。 如果您的目标xml文件包含HMTL元素,并且您正在尝试将这个xsl:template应用于它们,那么使用table,div或anithing就是有意义的。
这里有几个链接:
- XSL模板
- XPath的
- 一本关于XML的好书 – Beginning XML