与以下 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>
而不是文本节点或属性。希望它能回答。
谁能告诉我下面模板匹配的含义
<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>
而不是文本节点或属性。希望它能回答。