Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Xml XSL XSL:template match="/&引用;_Xml_Xslt_Xslt 1.0_Xslt 2.0 - Fatal编程技术网

Xml XSL XSL:template match="/&引用;

Xml XSL XSL:template match="/&引用;,xml,xslt,xslt-1.0,xslt-2.0,Xml,Xslt,Xslt 1.0,Xslt 2.0,我正在学习XML和如何使用XSL文件。 在XSL文件中,我找到了以下术语: xsl:template match="/" 这代表什么? 我可以用什么来代替/? 我是否可以编写表或任何其他HTML标记来代替/?匹配属性指示模板转换将应用于哪些部分。在这种情况下,“/”表示xml文档的根。必须在match属性中提供的值应该是XPath表达式。XPath是必须用于引用目标xml文件特定部分的语言 为了有意义地理解match属性中还可以添加哪些内容,您需要了解什么是xpath以及如何使用它。我建议你看

我正在学习XML和如何使用XSL文件。 在XSL文件中,我找到了以下术语:

xsl:template match="/"
这代表什么? 我可以用什么来代替
/

我是否可以编写
或任何其他HTML标记来代替
/

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

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

我可以写“表格”或其他什么吗 html标记而不是“/”

是的,你可以。但这取决于你到底想做什么。如果您的目标xml文件包含HMTL元素,并且您需要在它们上应用这个xsl:template,那么使用table、div或anithing是有意义的

这里有几个链接:

  • 一本关于XML的好书-

指令的
匹配属性的值必须是匹配模式

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

XPath中的
/
表示根节点或文档节点。在XPath2.0(以及XSLT2.x)中,这也可以写成
document-node()

匹配模式可以包含

匹配模式示例:

<xsl:template match="table">
可以应用于名为
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模式,它与文档的顶级元素匹配,而不管其名称:
/*

这个答案实际上并不正确。不是所有的XPath表达式都可以被指定为一个合法的匹配模式。我同意,但在我看来,初学者最好考虑使用XPath定义的匹配模式。今天上午我花了很好的一部分被这个文档/根元素二分法完全弄糊涂了。我已经使用XML和DOM很多年了,但仍然会遇到这样的问题!谢谢你让我了解这个微妙但基本的区别,我已经忘记太久了!:)哇,我使用xslt已经7年了,但我不知道这一点。知道这一点很有帮助,在其他资料中很少提到:“如果某个节点是将某个模式作为某个可能上下文的表达式进行计算的结果的成员,则该节点与该模式匹配;可能的上下文是那些其上下文节点是要匹配的节点或其祖先之一的上下文。“()@NiklasPeter,是的,规范在这里解释了XPath表达式是如何计算的——那么我们是否需要提到任何XSLT程序员都应该知道XPath?我想每个人都很清楚这一前提条件。我添加这一引语的原因是它的最后一部分:可能的上下文是那些上下文节点是要匹配的节点或其祖先节点之一的上下文。”。我认为尝试所有祖先节点都是XSLT特有的,而不是每个熟悉XPath的人都知道的事实。@NiklasPeter,规范的这一摘录是一种复杂的方式,可以说匹配模式可以从(和/或包含)
/
缩写。W3C规范因其对最终用户的混淆和“信息性”而臭名昭著。或许我错了,我们可以向@Michel kay寻求解释。
<xsl:template match="/comment()"/>