需要XSLT语法说明

时间:2018-03-13 07:15:56

标签: xml xslt

有人可以解释下面的XSL语法

<xsl:template match="@*|node()[not(self::*)]">
<xsl:element name="{local-name()}">

enter image description here

2 个答案:

答案 0 :(得分:1)

match="@*|node()[not(self::*)]"

@* - 模板匹配所有属性节点

node()[XXX] - 模板匹配元素,文本节点,注释和处理指令,前提是谓词XXX为真

self::* - 如果上下文节点是一个元素,则选择该元素,否则它不会选择任何内容

not(self::*) - 如果self::*没有选择任何内容,即上下文节点不是元素,则为真。

因此代码匹配所有属性,文本节点,注释和处理指令

也可以写成

match="@* | text() | comment() | processing-instruction()"

下一行

<xsl:element name="{local-name()}"/>

创建一个元素,其名称与上下文项的本地名称相同。如果上下文项是属性或处理指令,则这很好,但如果上下文项是注释或文本节点,则会导致动态错误,因为这些节点没有本地名称。

所以代码是错误的:编写一个匹配注释和文本节点的模板规则没有意义,如果遇到一个则会失败。

答案 1 :(得分:0)

您正在创建包含所有node()名称和属性而不是剩余元素的元素:

  1. 所有属性都将作为元素包装。
  2. 所有节点都将创建为元素
  3. 注意:您不匹配elemetns