谁能告诉我以下模板匹配的含义
<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="*(*)">
这在语法上似乎是错误的。因为你应该在那里使用[]
。然后这意味着选择任何在其下有元素的元素。
这里的元素是一个标记<tag>
而不是文本节点或属性。希望它能回答。