我只是学习XML以及如何使用XSL文件。 在XSL文件中,我发现了以下术语:
xsl:template match="/"
这代表什么?
我可以使用什么而不是/
?
我可以写table
或任何其他HTML标记而不是/
吗?
答案 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是有意义的。
这里有一些链接: