Différence entre * et node () dans XSLT

Quelle est la différence entre ces deux modèles?

<xsl:template match="node()">

<xsl:template match="*">
20
demandé sur Svish 2012-08-22 14:46:37

3 réponses

<xsl:template match="node()">

est l'abréviation de:"

<xsl:template match="child::node()">

ceci correspond à n'importe quel type de noeud qui peut être sélectionné via the child:: axis :

  • élément

  • nœud texte

  • processing-instruction (PI) node

  • nœud de commentaire.

de l'autre côté :

<xsl:template match="*">

est l'abréviation de:"

<xsl:template match="child::*">

cet élément correspond à tout élément .

l'expression XPath: someAxis::* correspond à n'importe quel noeud du type de noeud primaire pour l'axe donné.

pour l'axe child:: , le type de noeud primaire est element .

32
répondu Dimitre Novatchev 2012-08-22 13:17:45

juste pour illustrer une des différences, à savoir que * ne correspond pas text :

donné xml:

<A>
    Text1
    <B/>
    Text2
</A>

d'Appariement node()

<xsl:stylesheet
    xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
    version="1.0">
    <xsl:output method="xml" indent="yes" omit-xml-declaration="yes"/>

    <!--Suppress unmatched text-->
    <xsl:template match="text()" />

    <xsl:template match="/">
        <root>
            <xsl:apply-templates />
        </root>
    </xsl:template>

    <xsl:template match="node()">
        <node>
            <xsl:copy />
        </node>
        <xsl:apply-templates />
    </xsl:template>
</xsl:stylesheet>

Donne:

<root>
    <node>
        <A />
    </node>
    <node>
        Text1
    </node>
    <node>
        <B />
    </node>
    <node>
        Text2
    </node>
</root>

attendu que la correspondance sur * :

<xsl:template match="*">
    <star>
        <xsl:copy />
    </star>
    <xsl:apply-templates />
</xsl:template>

ne correspond pas aux noeuds de texte.

<root>
  <star>
    <A />
  </star>
  <star>
    <B />
  </star>
</root>
13
répondu StuartLC 2012-08-22 11:35:54

refer to XSL xsl: template match= " / " pour d'autres correspondent à des motifs.

2
répondu Peter 2017-05-23 12:09:33