与以下 XPATH 匹配的模板意味着

template match with below XPATH means

谁能告诉我下面模板匹配的含义

<xsl:template match="*[not(*)]">

<xsl:template match="*(*)">

我猜的是,第一个模板匹配将应用于所有没有任何子元素的元素节点

第二个匹配适用于具有子元素的元素 谢谢

*用于匹配任意元素。在有方括号的地方,这表示要对该元素进行检查的条件。在这种情况下 not(*) 正在检查没有子元素。

因此<xsl:template match="*[not(*)]">将匹配没有子元素的元素。因此它会匹配这个(因为 Bob 是一个文本节点,而不是一个元素)

<Name>Bob</Name>

还有这个(因为 type 是一个属性,而不是一个元素)。

<Name type="A" />

但它不会匹配这个(因为 Name 有子元素 FirstName

<Name><FirstName>Bob</FirstName></Name>

第二个模式 <xsl:template match="*(*)"> 实际上不是有效语法。

如果您尝试匹配具有子元素的元素,您可以这样做:

<xsl:template match="*[*]">
<xsl:template match="*[not(*)]">

表示元素下面没有任何元素。

<xsl:template match="*(*)">

这看起来在语法上是错误的。因为你应该在那里使用 [] 。那么这将意味着 select 其下有元素的任何元素。

这里的元素是一个标签<tag>而不是文本节点或属性。希望它能回答。