web-dev-qa-db-fra.com

xpath sélectionner par attribut lorsque l'attribut n'est pas présent

Question courte: je voudrais sélectionner tous les nœuds qui ne correspondent pas à un attribut (@type! = 'X') mais aussi l'attribut n'existe pas (??). Actuellement, je ne reçois rien en retour, car les autres nœuds n'ont aucun attribut.

Contexte: j'ai du XML. Notez que l'un a type = "feature" mais tous les autres n'ont pas d'attraction "type".

<image type="feature"><description>X</description><url>media/designer_glass_tile_04.jpg</url><height></height><width/></image>
<image><description>Designer Glass 05</description><url>media/designer_glass_tile_05.jpg</url><height></height><width/></image>
<image><description>Designer Glass 06</description><url>media/designer_glass_tile_06.jpg</url><height></height><width/></image>
<image><description>Designer Glass 07</description><url>media/designer_glass_tile_07.jpg</url><height></height><width/></image>
<image><description>Designer Glass 08</description><url>media/designer_glass_tile_08.jpg</url><height></height><width/></image>

Et un style XSL:

        <div id="gallery">
            <div id="feature" >
                <xsl:apply-templates select="image[@type='feature']"/>
            </div>
            <div id="thumbs">
                <xsl:apply-templates select="image[@type!='feature']"/>
            </div>
        </div>
43
Gabe Rainbow

Le code suivant sélectionnera tous les nœuds où l'attribut type n'existe pas:

select="image[not(@type)]"

Ajoutez cette logique dans votre code.

70
RATHI

Essayez d'utiliser not() au lieu de != dans le prédicat ...

   <div id="gallery">
        <div id="feature" >
            <xsl:apply-templates select="image[@type='feature']"/>
        </div>
        <div id="thumbs">
            <xsl:apply-templates select="image[not(@type='feature')]"/>
        </div>
    </div>
12
Daniel Haley