模板匹配以下XPATH意味着

时间:2016-02-18 09:50:05

标签: xml xslt xpath xslt-1.0 xslt-2.0

任何人都可以告诉我以下模板匹配的含义

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

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

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

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

2 个答案:

答案 0 :(得分:2)

*用于匹配任何元素。如果您有方括号,则表示要在该元素上检查的条件。在这种情况下,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="*[*]">

答案 1 :(得分:0)

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

它表示在其下没有任何元素的元素。

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

这看起来在语法上是错误的。因为你应该在那里使用[]。然后它将意味着选择任何元素下面的元素。

此处元素是标记<tag>,而不是文本节点或属性。希望它能回答。

相关问题