2010-09-28 5 views
0

me reste que cette expression XPath:aide à comprendre XPath

link[@rel='alternate' and @type='text/html' or not(@rel)]/@href | link/text() 

?

Acctuellement, je ne comprends pas le symbole |

+0

Bonne question (+1). Voir ma réponse pour une définition et une explication exactes. :) –

Répondre

-1

Le tube (|) dans XPath combine des expressions. Donc, cela va revenir l'attribut href pour les éléments de liaison (qui match le prédicat) et le contenu du texte des liens

donc donné un fragment comme

<link>test</link> 
    <link href="http://www.google.com">Google</link> 
    <link rel="zzzz" href="http://www.stackoverflow.com">Stack Overflow</link> 

vous obtiendrez:

test 
http://www.google.com 
Google 
Stack Overflow 
2

Le symbole | est un syndicat. Il saisit tous les éléments qui correspondent soit du côté gauche, soit du côté droit.

Qu'est-ce que XPath dit est:

  • Saisissez l'attribut href de toutes les balises de liens qui ont un attribut « rel = alternate » et un attribut « type = text/html », ou prenez le href de tous balises de liens qui ne sont pas l'attribut rel attribut

également saisir (à cause de l'union):

  • Prenez le texte intérieur des balises de liens sur la page.

Sorte de XPath wierd, mais c'est ce qu'il fait.

+0

Merci beaucoup. – Nikita

0

En fait, je ne comprends pas le symbole |

C'est le XPath union operator.

Tel que défini dans le W3 XPath 2.0 Spec:

• Le syndicat et |. les opérateurs sont équivalent. Ils prennent deux séquences comme opérandes et renvoient une séquence contenant tous les noeuds apparaissant dans l'un ou l'autre des opérandes.

Bien sûr, le « syndicat » (mot anglais) opérateur n'a été ajoutée à XPath 2.0 et XPath 1.0, nous avons seulement son synonyme auparavant, représenté par le caractère |.

Ainsi, dans le cas particulier de:

link[@rel='alternate' and @type='text/html' or not(@rel)]/@href | link/text() 

l'expression XPath ci-dessus sélectionne l'union de deux ensembles:

  1. Tous les noeuds sélectionnés par: link[@rel='alternate' and @type='text/html' or not(@rel)]/@href

  2. Tous les nœuds, sélectionnés par: link/text()

Union est une opération standard dans la théorie des ensembles (et en mathématiques), bien que le signe « U » est utilisé pour y représenter l'union.

Pour citer la définition de Wikipedia:

L'union de deux ensembles A et B est la collection de points qui sont en A ou en B (ou les deux):

Un exemple simple:

A = {1,2,3,4,5,6} 

B = {1,5,6,7,8} 


A U B = {1,2,3,4,5,6,7,8}