任何人都可以告诉我以下模板匹配的含义
<xsl:template match="*[not(*)]">
和
<xsl:template match="*(*)">
我猜测,第一个模板匹配将应用于所有没有子元素的元素节点
和第二个匹配适用于具有子元素的元素 谢谢
答案 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>
,而不是文本节点或属性。希望它能回答。