Les outils de base : XPath, XSL, XLink, XForms 1. XPATH 2. XSLT 3. XSLFO 4. XLink 5. XForms 6....

Preview:

Citation preview

Les outils de base : XPath, XSL, XLink, XForms

1. XPATH2. XSLT3. XSLFO4. XLink5. XForms6. Conclusion

G. GardarinIII.2

1. XPath : l'adressage XML

XPath Expressions de chemins dans un arbre XML Permet de sélectionner des nœuds par

navigation

XPath

Document XML

?

G. GardarinIII.3

XPath

XML Path Language recommandation W3C pour expressions de

chemins acceptée le 16 novembre 1999 version 2 en cours d'élaboration

Expressions de chemins communes à : XSL Xpointer (liens) XQuery (queries)

Xpath permet de rechercher un élément dans un document d'adresser toute sous partie d'un document

XPath

G. GardarinIII.4

XPath - Parcours d'arbre

XPath opère sur l'arbre d'un document<livre auteur = "Hugo"> <titre>Les chatiments</titre> <chapitre> <section>Buonaparte </section> <section>Neige</section> </chapitre> …</livre>

racine

section

Auteur = "Hugo"

livre

Buonaparte

chapitre

Neige

chapitre

sectionLes chatiments

titre

XPath

G. GardarinIII.5

XPath - Expression de chemins

Une expression de chemins spécifie une traversée de l'arbre du document : depuis un nœud de départ vers un ensemble de nœuds cibles les cibles constituent la valeur du

cheminement Un chemin peut être :

absolu commence à la racine /étape1/…/étapeN

relatif commence à un nœud courant étape1/…/étapeN

XPath

G. GardarinIII.6

Syntaxe et sémantique

Cheminement élémentaire direction::sélecteur[predicat]

Directions parent, ancestor, ancestor-or-self child, descendant, descendant-or-self preceding, preceding-sibling following, following-sibling self, attribute, namespace

Sélecteur nom de nœud sélectionné (élément ou @attribut)

Prédicat [Fonction(nœud) = valeur]

XPath

G. GardarinIII.7

XPath - Exemples

Sections d'un chapitre /child::livre/child::chapitre/child::section /livre/chapitre/section

Texte du chapitre 1 section 2 /descendant::chapitre[position() = 1]

/child::section[position() = 2]/child::text() //chapitre[1]/section[2]/text()

XPath

G. GardarinIII.8

XPath - Synthèse

Pattern Exemple Signification Nom section Sélectionne les éléments de nom donné Nom[0] section[0] Sélectionne le premier élément ayant le nom donné Nom[end()] section[end()] Sélectionne le dernier élément ayant un nom donné | Droite|Gauche Indique une alternative (un nœud OU bien l'autre (ou les deux)) / / Sélectionne le nœud racine d'une arborescence /arbre/Nom /livre/chapitre Sélectionne les nœuds descendants par la balise de nom donné de l'arbre * * Motif "joker" désignant n'importe quel élément // //personne Indique tous les descendants d'un nœud . . Caractérise le nœud courant

.. .. Désigne le nœud parent. Permet de remonter d'un niveau dans l'arborescence

@ @nom Indique un attribut caractéristique (@nom désigne la valeur de l'attribut). La notation @* désigne tous les attributs d'un élément

text() text() Désigne le contenu d'un élément (le texte contenu entre ses balises)

ID() ID('a2546') Sélectionne l'élément dont l'identifiant (la valeur de l'attribut ID) est celui spécifié en paramètre

Comment() Comment() Désigne tous les nœuds commentaires Node() Node() Désigne tous les noeuds

XPath

G. GardarinIII.9

2. XSLT : la présentation

Permet de transformer un document régulier ou irrégulier de XML à XML, XHTML est un cas particulier De XML à présentation (HTML, texte, rtf, pdf,

etc.)

Un document est un arbre Le processeur XSL parcourt l'arbre et

applique les règles de transformations vérifiées (à condition vraie) aux nœuds sélectionnés

Un autre arbre est produit en sortie

XSLT

G. GardarinIII.10

Publications avec XSL

Plusieurs formats de publication d’un même jeu de données

Il permet la présentation sur des terminaux variés

XSLProcessor

XMLDocument

Format ( PDF)

Format (XML) application

e.Commerce

format (WML)

Browser Netscape/IE

(XHTML, DHTML, HTML)

Format (XML) pour Word,

Excel

XSLStylesheet

XSL

G. GardarinIII.11

Architectures

Fichier

Base de données

Affichage

•Affichage•Traitement

SERVEUR

XML

XML

Programme

XMLASPouJSP

XSL

Processeur XSL

Affichage

HTML

HTML

XML

Processeur XSL

G. GardarinIII.12

Les feuilles de style

Une feuille de style XSL est un document XML de racine <xsl:stylesheet> contient une liste de règles de transformation

<xsl:template>

Chaque règle (<xsl:template>) est définie par: Une condition spécifiant le sous-arbre du

document d’entrée auquel elle s’applique Une production spécifiant le résultat de

l’application de la règle

Utilisation d'un nom de domaine spécifique Le préfixe généralement utilisé est xsl:

XSLT

G. GardarinIII.13

Exemple de document<?xml version="1.0" ?>

<Guide><Restaurant Categorie="**"> 

<Nom>Le Romantique</Nom><Adresse> 

<Ville>Cabourg</Ville>   <Dept>Calvados</Dept>

  </Adresse>  </Restaurant><Restaurant Categorie="***"> 

<Nom>Les TroisGros</Nom><Adresse> 

<Ville>Roanne</Ville>  <Dept>Loire</Dept>  

</Adresse></Restaurant>

</Guide>

 

XSLT

G. GardarinIII.14

Exemple de feuille de style XSL<?xml version="1.0" ?> <xsl:stylesheet xmlns:xsl="http://www.w3.org/xsl"> <xsl:template match="/">

<html><head><B>ESSAI XSL</B></head> <body><xsl:apply-templates/></body></html> 

</xsl:template> <xsl:template match="Guide">  <H1>BONJOUR LE GROUPE XML</H1>   <H2>SUIVEZ LE GUIDE</H2>   <xsl:apply-templates />   </xsl:template><xsl:template match="Restaurant">

<P> <I>Restaurant :</I>   <xsl:value-of select="Nom"/></P> 

</xsl:template>  </xsl:stylesheet>

XSLT

G. GardarinIII.15

Les règles de production

Définition des règles par <xsl:template …> Attributs

match: condition de sélection des nœuds sur lesquels la règle s'applique (XPath)

name: nom de la règle, pour invocation explicite (en conjonction avec <call-template>)

mode: permet d'appliquer à un même élément des règles différentes en fonction du contexte

priority: priorité, utilisé en cas de conflit entre deux règles ayant la même condition

Exemples <xsl: template match="/"> <xsl: template match="auteur">

XSLT

G. GardarinIII.16

La génération du résultat

Le contenu de l'élément <xsl:template> est la production de la règle Les éléments du namespace xsl sont des instructions qui

copient des données du document source dans le résultat Les autres éléments sont inclus tels quels dans le résultat

Instructions pour: Parcourir l'arbre du document source Copier le contenu du document source dans le résultat

Parcours de l'arbre: <xsl:apply-templates> <xsl:for-each>

Copie du contenu du nœud sélectionné <xsl:value-of select= … >

XSLT

G. GardarinIII.17

Résumé des commandes <xsl:template>, définir une règle et son contexte

  <xsl:apply-templates />, appliquer les transformations aux

enfants du nœud courant

<xsl:value-of select … />, extrait la valeur d'un élément sélectionné à partir du nœud courant

<xsl:for-each>, définir un traitement itératif 

<xsl:pi>, générer une processing instruction

<xsl:element>, générer un élément 

<xsl:attribute>, générer un attribut 

<xsl:if>, définir un traitement conditionnel 

XSLT

G. GardarinIII.18

Quelques éditeurs- IBM XSL Ed i to r -

version: 1.0 preview release 2 platforms: J ava

license: Free developer: Alphaworks, IBM

revised: 21 jan 2000

Editeur multi-frame et outils de mise au point – Alphawork d'IBM - S tylus S tudio -

version: 4.6 platforms: Windows NT/2000

license: Commercial; 30 day evaluation available. developer: Excelon Corporation

revised: 06 mar 2003

Editeur de Excelon (Progress); creation XSL et mise au point - XMLTransfo rm -

version: 1.1.0 platforms: J ava

license: Commercial; free evaluation version available developer: TIBCO Software Inc.

revised: 22 feb 2002

Editeur de Tibco pour les transformations XSL à XSL

XSLT

G. GardarinIII.19

IBM XSL Editor

XML XSLT Rendu

XSLT

G. GardarinIII.20

Bilan XSLT

XSLT est un langage très puissant de transformation d'un arbre XML en un autre

XSLT permet en particulier de publier des données XML sur le Web par transformation en un document HTML standard

XSLT est utilisé : Pour publier des contenus XML Pour transformer des données (EAI, B2B)

XSLT

G. GardarinIII.21

3. XSLFO : le formatage

Les Objets de mise en forme sont multiples :

<fo:block> utilisé pour les paragraphes, les titres…

<fo:display-rule> ligne de séparation

<fo:display-graphic> zone rectangulaire contenant graphisme

Ils possèdent de nombreuses propriétés

Pour un block on peut définir la marge gauche et droite l’espace avant et après le paragraphe la couleur du texte ………...

XSLFO

G. GardarinIII.22

XSLFO : principes

Ils sont appliqués à un nœud de l ’arbre résultat

Ils sont appelés par l ’espace nominale fo

Syntaxe :<xsl:template match="[motif xpath]" >

<fo :[objet-de mise en forme]

([propriété-style]="[valeur]")+>

[instructions-de-traitement]

</fo:[objet de mise-en-forme]>

</xsl:template>

XSLFO

G. GardarinIII.23

XSLFO : Exemple

Définition de propriétés pour la racine <xsl:template match=‘/’>

<fo-display-sequencefont-style=‘italic’

start-indent=‘4pt’end-indent=‘4pt’

font-size=‘18pt’<xsl:apply-templates/></fo-display-sequence>

</xsl:template

La définition d’une propriété en locale est prioritaire devant l’héritage

XSLFO

G. GardarinIII.24

Les outils XSL

Processeurs XSLT conformes à la spécification: Apache Group (www.apache.org): Xalan 1.0.1 Oracle XDK (www.oracle.com): XML Parser 2.0.2 James Clark (www.jclark.com): XT Microsoft Internet Explorer 5.0 et plus Netscape 6 supporte XSLT

Processeur XSLFO Apache Group : FOP (Formating Object Processor)

Génère du PDF http://www.apache.org JFOR (Open Source) Génère du RTF http://www.jfor.org

XSL

G. GardarinIII.25

Bilan XSL

XML = SGML léger pour la production de publications web importantes :

production d’une source unique en XML ;

XSLT = génération automatique de présentations web multiples ;

XSLFO = génération automatique sur d’autres supports.

Questions ?

XSL

G. GardarinIII.26

4. Autres spécifications

XLink = liens externes entre documents

XPointer = pointeurs internes à un document

XForms = saisie de formulaires avec XML

XLink et plus

G. GardarinIII.27

Xlink et les liens

Exprimer des liens entre documents XML pointe sur une URL l'URL peut inclure une partie Xpointer tout élément peut être un lien

Différents types de liens simple xlink:type = "simple" étendu xlink:type = "extended" De véritables associations 1-1 en simple, k-n en étendu avec rôles possibles avec comportements possibles

XLink et plus

G. GardarinIII.28

Exemples simples

<Annotation xlink:type="simple" href="note1.xml"> 1 </Annotation>

<Auteur xlink:type="simple" inline="true" href="http://www.e-xmlmedia.com/~georges/"> Georges Gardarin </Auteur>

<Image xlink:type="simple" href="logo.gif"/>

Les attributs doivent être définis dans la DTD si le document en possède une

XLink et plus

G. GardarinIII.29

Les liens étendus

Associations orientées de M vers N Permettent de relier des

éléments entre eux par des arcs étiquetés et ainsi de composer des graphes étiquetés orientés

Éléments ressource et locator définissant les nœuds

Éléments arc définissant les liens

Ressource <xxx

xlink:type="resource" label="..." title="..." role="...">contenu de l'élément</xxx>

Locator <xxx xlink:type="locator"

label="…" title="…" role="…" href="…" />

Arc <xxx xlink:type="arc"

from="…" to="…" show="…" actuate="…" title="…" arcrole="…">contenu</xxx>

XLink et plus

G. GardarinIII.30

Les attributs de XLink

xlink:type type de lien

href référence de l'URL

title titre du document cible

role rôle du document cible

show en place, interne ou

nouveau document

actuate manuel ou automatique

label étiquette des arcs

from source de l'arc

to cible de l'arc

XLink et plus

G. GardarinIII.31

XPointer

Permet de référencer un élément particulier d'un document le document est spécifié par Xlink le Xpointer est ajouté à l'URI séparée par # ou |

Pointeur absolue id() : référence un élément d'identifiant donné root() : pointe sur la racine d'un document html() : référence un document HTML

Pointeur relatif = XPath child, descendant, ancestor, preceding, following, … Exemple : <vin2 xlink:type="simple"

href="http://www.site.fr/ degustation#xptr(/child::degustation/child::vin[2])"

XLink et plus

G. GardarinIII.32

XForms

Nouvelle génération de formulaires Web Assemblage de formulaires à partir de

schéma Schéma = structure + type Contraintes = Dépendances, expressions et

calculs

XForms User Interfaces est la partie apparente pour l’utilisateur (présentation) XForms User Interfaces intègre toutes les

commandes de XHTML Ajoute en plus des contrôles (tags) spécifiques

au niveau présentation.

XForms

G. GardarinIII.33

Saisie des formulaires

Génération et contrôle du message XML Contrôle sur le client ou le serveur

XForms Model

XFormsUser

Interface

<XML>Instance

data

XForms Submit Protocol

XForms

G. GardarinIII.34

5. Conclusion

XSL pour transformer et présenter puissant mais complexe problème de performance des processeurs ?

Recommandation XSL version 1.0 http://www.w3.org/TR/xsl/

Recommandation XPath version 1.0 http://www.w3.org/TR/xpath

Recommandation Xlink version 1.0 http://www.w3.org/TR/xlink

Références

G. GardarinIII.35

G. GardarinIII.36

EXERCICES ET COMPLEMENTS

Modèle des documents en entrée Modèle des documents en sortie Structure d’une feuille de style Mise en œuvre des transformations

G. GardarinIII.37

Modèle de document en entrée

Le document transformé doit être un document XML bien formé Document XML: arbre dont les nœuds sont les éléments

et leur contenu (texte) Pour XSL, la racine du document, les attributs, les

namespaces, les instructions de traitement et les commentaires sont aussi vus comme des nœuds

Types de nœuds traités par XSL: Racine du document (différent de l’élément racine!) Éléments Texte Attributs Namespaces Instructions de traitement Commentaires

G. GardarinIII.38

Exemple de document XML

<?xml version="1.0" encoding="iso-8859-1"?><?xml-stylesheet href="style1.xsl" type="text/xsl"?>

<CATALOGUE> <ARTICLE> <REFERENCE>JT3006</REFERENCE> <PRIX UNIT="FFR" TAX="TTC">1874</PRIX> </ARTICLE> <ARTICLE> … </ARTICLE></CATALOGUE>

G. GardarinIII.39

Arbre correspondant

Les attributs apparaissent comme des fils de l’élément auquel ils s’appliquent

Racine

Catalogue

Article

ReferencePrix

Tax="TTC"

Prix="FFR" 1874 JT3006

Article

<?xml-stylesheet href="style1.xsl" type="text/xsl"?>

G. GardarinIII.40

Modèle de document en sortie

En général, le document produit est un document XML Document complet Fragment de document bien formé

La norme prévoit deux autres types de documents produits: Un type HTML, qui permet de transformer le HTML bien

formé (ex: <BR/>) en HTML standard (ex: <BR>) Un type texte, qui permet de générer des formats non

balisés de type RTF, Postscript, TeX.

Le type de format de sortie est contrôlé par l’élément xsl:output

G. GardarinIII.41

Structure d’une feuille XSL

Une feuille de style XSL contient une liste de règles de transformation

Chaque règle (template) est définie par: Une condition spécifiant le sous-arbre du document

d’entrée auquel elle s’applique Une production spécifiant le résultat de l’application de

la règle

XSL utilise XML pour décrire les règles de transformation: <xsl:stylesheet> est l’élément racine d’une feuille de

style XSL Toutes les instructions XSL sont des éléments du

namespace "http://www.w3.org/1999/XSL/Transform" Le préfixe généralement utilisé est xsl

G. GardarinIII.42

Exemple de feuille de style

<?xml version="1.0"?><xsl:stylesheet version="1.0"

xmlns:xsl="http://www.w3.org/1999/XSL/Transform">

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

</html> </xsl:template>

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

</xsl:stylesheet>

Style1.xsl

G. GardarinIII.43

Que fait l'exemple?

La première règle: Remplace l'élément racine <CATALOGUE> par

l'élément <html> Le contenu de <html> est le résultat de la

transformation du contenu de <CATALOGUE> par les autres règles de la feuille de style

La seconde règle: Remplace chaque élément <ARTICLE> par un

élément <P> Le contenu de <P> est le texte (sans les

balises) contenu dans les descendants de l'élément <ARTICLE> (règle par défaut)

G. GardarinIII.44

Mise en œuvre

Trois types de mise en œuvre possible: Transformation statique Transformation dynamique sur le serveur Web Transformation dynamique sur le client

Le choix de l'approche dépend: De l'utilisation des documents produits

(impression papier, publication Web) Du type de données XML manipulées (statique

ou dynamique) Des capacités du serveur Web utilisé Des capacités du client Web utilisé

G. GardarinIII.45

Architectures

Fichier

Base de données

Affichage

•Traitement•Affichage

SERVEUR

XML

XML

Programme XMLASPouJSP

Processeur XSL

Affichage

HTML

HTML

XMLProcesseur

XSL

WMLPSPDF

Processeur XSL

XML HTML

G. GardarinIII.46

Transformation statique

Les documents XML sont transformés à l'avance: Impression papier Stockage HTML sur un site Web standard

Avantages: Pas de problèmes de performance Serveur et client Web standards

Inconvénients Impossibilité de gérer des données XML

dynamiques Cohérence entre source et résultat

G. GardarinIII.47

Transformation sur le serveur

Les documents XML sont transformés à la demande par le serveur: Publication Web en HTML Échanges inter-application

Avantages: Permet de gérer des données XML dynamiques Client Web standard (HTML)

Inconvénients: Nécessite un serveur compatible XSL Problèmes de performances sur le serveur

G. GardarinIII.48

Transformation sur le client

Le document XML et la feuille XSL sont transmises par le serveur avant transformation: Publication Web

Avantages: Permet de gérer des données dynamiques Serveur Web standard Pas de problèmes de performances sur le

serveur

Inconvénients: Nécessite un client Web compatible XSL Les données XML ne sont pas filtrées avant envoi

G. GardarinIII.49

Association document-feuille XSL

Transformation statique: Le document XML et la feuille XSL sont deux

paramètres du programme de transformation

Transformation dynamique: L'association est gérée par une instruction de

traitement dans le fichier XML <?xml-stylesheet href="style1.xsl" type="text/xsl"?>

G. GardarinIII.50

LES RÈGLES XSL

Définition d'une règle La génération du résultat L'élément <xsl:apply-template> L'élément <xsl:value-of> L'élément <xsl:for-each>

G. GardarinIII.51

Définition d'une règle

Définition des règles avec <xsl:template>, avec les attributs: match: condition de sélection des nœuds sur lesquels la règle

s'applique name: nom de la règle, pour invocation explicite (en

conjonction avec <call-template>) mode: permet d'appliquer à un même élément des règles

différentes en fonction du contexte priority: priorité, utilisé en cas de conflit entre deux règles

ayant la même condition

Au moins un des attributs match ou name doit être présent

L'attribut match permet de spécifier des expressions complexes XPath pour sélectionner les nœuds

G. GardarinIII.52

La génération du résultat

Le contenu de l'élément <xsl:template> est la production de la règle Les éléments du namespace xsl sont des instructions qui

copient des données du document source dans le résultat Les autres éléments sont inclus tels quels dans le résultat

Instructions pour: Parcourir l'arbre du document source Copier le contenu du document source dans le résultat

Parcours de l'arbre: <xsl:apply-templates> <xsl:for-each>

Copie du contenu <xsl:value-of>

G. GardarinIII.53

L'élément <xsl:apply-templates>

L'élément <xsl:apply-templates> permet d'appliquer récursivement les règles aux fils de l'élément sélectionné par la règle courante

Il a deux attributs optionnels: select: permet de sélectionner les descendants à

traiter mode: permet de sélectionner les règles à

appliquer L'attribut select permet de définir des

expressions complexes pour sélectionner des nœuds Similaire à l'attribut match de <xsl:template> Expressions XPath

G. GardarinIII.54

Utilisation du select<?xml version="1.0"?><xsl:stylesheet version="1.0"

xmlns:xsl="http://www.w3.org/1999/XSL/Transform">

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

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

<xsl:template match="ARTICLE"> <xsl:apply-templates select="LIBELLE"/> </xsl:template></xsl:stylesheet>

Style2.xsl

G. GardarinIII.55

L'élément <xsl:value-of>

L'élément <xsl:value-of> calcule la valeur d'une expression et la copie dans le résultat L'expression est évaluée dans le contexte de l'élément

courant

Il a deux attributs: select: attribut obligatoire spécifiant l'expression XPath à

évaluer disable-output-escaping: attribut optionnel gérant la

copie des caractères spéciaux (valeur: yes ou no)

La valeur d'un nœud est une string, sa valeur exacte dépend du type de nœud: Pour un élément, c'est tout le texte compris entre les

balises de début et de fin

G. GardarinIII.56

Utilisation de <xsl:value-of><?xml version="1.0"?><xsl:stylesheet version="1.0"

xmlns:xsl="http://www.w3.org/1999/XSL/Transform">

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

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

<xsl:template match="ARTICLE"> <xsl:value-of select="LIBELLE"/> </xsl:template></xsl:stylesheet>

G. GardarinIII.57

L'élément <xsl:for-each>

L'élément <xsl:value-of> ne devrait être appliqué qu'à des expressions retournant un nœud unique: Dans le cas contraire, seule la valeur du premier nœud

est retournée

L'élément <xsl:for-each> permet d'itérer sur un ensemble d'éléments défini par l'attribut: select: attribut obligatoire permettant de sélectionner

les nœuds à traiter

Le contenu de l'élément <xsl:for-each> est copié n fois dans le résultat: Les instructions xsl sont traitées comme dans une règle

<xsl:for-each> permet de réduire le nombre de règles, dans le cas de documents réguliers

G. GardarinIII.58

Utilisation de <xsl:for-each><?xml version="1.0"?><xsl:stylesheet version="1.0"

xmlns:xsl="http://www.w3.org/1999/XSL/Transform">

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

<xsl:template match="CATALOGUE"> <body> <xsl:for-each select="ARTICLE"/> < xsl:value-of select="LIBELLE"/> </xsl:for-each> </body> </xsl:template>

</xsl:stylesheet>

Style3.xsl

G. GardarinIII.59

La sélection des éléments

L'attribut match des éléments <xsl:template> permet de spécifier des conditions complexes pour sélectionner les éléments auxquels appliquer une règle

La syntaxe de l'attribut select, utilisée par plusieurs instructions, permet de sélectionner des éléments parmi les descendants de l’élément courant auquel s’applique la règle

G. GardarinIII.60

Exemples d'expressions para: tout élément para *: tout élément chapter|appendix: tout élément chapter ou appendix olist/item: tout élément item avec un père olist appendix/*/para: tout élément para avec un grand-père

appendix appendix//para: tout élément para avec un ancêtre

appendix /: le nœud racine text(): tout nœud texte processing-instruction(): toute instruction de traitement node(): tout nœud id("W11"): élément d'ID W11

G. GardarinIII.61

Exemples avec tests

para[1]: tout élément para qui est le premier fils para de son père

*[position()=1 and self::para]: idem para[last()=1]: tout élément para qui est le seul fils

para de son père items/item[position()>1]: tout élément item qui à un

père items et qui n'est pas le premier fils item de son père

item[position() mod 2 = 1]: tout élément item qui est un fils item impair

@class: tout attribut class @*: tout attribut div[@class="appendix"]//p: tout élément p avec un

ancêtre div dont l'attribut class vaut appendix

Recommended