XPath表达式@ * | node()选择属性节点(@ *)和所有其他类型的XML节点(node())的并集。
这是attribute :: * |的缩写child :: node()。
在XSLT中,XPath是相对于上下文节点,默认的selection axis是子轴,所以表达式
>选择上下文节点的所有属性和直接子项(当用作select =“…”表达式时,例如< xsl:apply-templates>)
>匹配所有属性和其他节点,无论上下文(在< xsl:template>中用作match =“”表达式时) – 请注意,选择节点并匹配它们之间存在差异:上下文节点仅对选择有意义。
想象下面的节点是上下文节点:
<xml attr="value">[ ]<child />[ ]<!-- comment -->[ ]<child> <descendant /> </child>[ ]</xml>
表达式node()不仅将选择< child>节点,而且还有四个仅空白的文本节点(为了可见性而由[和]表示)和注释。 <后裔>没有被选中。
XML的一个特殊特征是属性节点不属于它们所属元素的子元素(尽管属性的父属是它所属的元素)。
这种非对称关系使得有必要分别选择它们,因此@ *。
它匹配属于上下文节点的任何属性节点,因此也将选择attr =“value”。
|是XPath联合运算符。它从两个单独的节点集创建一个单个节点集。
< xsl:apply-templates>然后找到适当的< xsl:template>为每个选定的节点运行它为该节点。这是上面提到的模板匹配部分。