我只是在学习 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()
.
匹配模式可以包含//
缩写。
匹配模式示例:
<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 文件包含 HTML 元素并且您尝试将其应用于它们,那么使用或其他任何东西xsl:template
都是有意义的。table
div
这里有几个链接: