2011-01-18 3 views
0

J'utilise une bibliothèque de parseurs HTML pour analyser une page Web en XML. Avec le XML, je veux sélectionner les nœuds contenant du texte qui appartiennent les uns aux autres en utilisant des requêtes xPath.Aide sur la requête xPath

Voici un exemple du HTML:

<p><span style="font-family: 'Verdana','sans-serif'; font-size: 32pt;"><span style="font-family: 'Verdana','sans-serif'; font-size: 11pt; mso-bidi-font-size: 18.0pt;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="line-height: 115%; font-family: 'Verdana','sans-serif'; font-size: 36pt; mso-fareast-font-family: Calibri; mso-bidi-font-family: 'Times New Roman'; mso-fareast-language: EN-US; mso-ansi-language: SV; mso-bidi-language: AR-SA;">&nbsp;</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; VECKA 3</span></span></p><p><span style="font-family: 'Verdana','sans-serif'; font-size: 32pt;"></span><span style="font-family: 'Verdana','sans-serif'; font-size: 11pt; mso-bidi-font-size: 18.0pt;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;17-21 JANUARI</span></p> 
<p style="margin-bottom: 0pt;"><span style="font-family: 'Verdana','sans-serif'; font-size: 11pt; mso-bidi-font-size: 18.0pt;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="font-family: 'Verdana','sans-serif'; font-size: 11pt; mso-bidi-font-size: 18.0pt;">11.30-14.30</span></p> 
<p style="margin-bottom: 0pt;"><span style="font-family: 'Verdana','sans-serif'; font-size: 10pt; mso-bidi-font-size: 15.0pt;">MÅNDAG:&nbsp;Parmesangratinerad tungafile med paprikasås</span></p> 
<p style="margin-bottom: 0pt;"><span style="font-family: 'Verdana','sans-serif'; font-size: 10pt; mso-bidi-font-size: 15.0pt;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Biffgryta med syltlök &amp; ris</span></p> 

Utilisation de XPath sur la pièce de HTML analysable, je veux choisir le <span> -node contenant le mot mandag, mais aussi le <span> -node suivant qui appartient à il. Ainsi, par exemple, je veux sélectionner les nœuds qui contiennent le texte: "MÅNDAG: Parmesangratinerad tungafile med paprikasås" et le texte "Biffgryta med syltlök & ris".

Je pense que je veux utiliser un XPath qui ressemble à ceci:

"//span[contains(.,'MÅNDAG') or (contains(.,'&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;') and ../parent-sibling::/span[contains(.,'MÅNDAG')]]" 

Toutes les idées?

Répondre

0

Dans XPath 2.0:

//span[contains(.,'MÅNDAG')/(. | following::span[1]) 

Dans XPath 1.0:

//span[contains(.,'MÅNDAG') | //span[contains(.,'MÅNDAG')/following::span[1] 
+0

//span[contains(.,'MÅNDAG ')] | //span[contains(.,'MÅNDAG')]/following::span[1] a fait le travail, merci! –

0

Je veux choisir le <span> -node contenant le mot MÅNDAG, mais aussi les éléments suivants <span> -node lequel appartient à celui-ci

Une expression XPath 1.0 sans union jeu de nœuds:

//span[(.|preceding::span[1])[contains(.,'MÅNDAG')]]