2010-10-16 9 views
1

J'ai un contenu html que je stocke en tant que document XML (en utilisant HTML Agility Pack). Je connais quelques XPath, mais je ne suis pas capable de zéro dans le contenu exact dont j'ai besoin.Extraire du contenu avec XPath?

Dans mon exemple ci-dessous, j'essaie d'extraire le texte "src" et "alt" de la grande image. Ceci est mon exemple:

<html> 
<body> 
    .... 
    <div id="large_image_display"> 
     <img class="photo" src="images/KC0763_l.jpg" alt="Circles t-shirt - Navy" /> 
    </div> 
    .... 
    <div id="small_image_display"> 
     <img class="photo" src="images/KC0763_s.jpg" alt="Circles t-shirt - Navy" /> 
    </div> 
</body> 
</html> 

Quel est le XPath pour obtenir "images/KC0763_l.jpg" et "cercles t-shirt - Marine"? C'est jusqu'où j'ai eu, mais c'est faux. Pratiquement pseudo code à ce stade:

\\div[@class='large_image_display']\img[1][@class='photo']@src 
\\div[@class='large_image_display']\img[1][@class='photo']@alt 

Toute aide pour obtenir ce droit serait grandement appréciée.

+0

Question sur l'alimentation, +1! Voir ma réponse pour une meilleure solution, plus efficace et pour une explication détaillée. :) –

Répondre

1

La XPath suivante vous obtiendrez le src attributs pour les balises img:

'//html/body/div/img[@class="photo"]/@src' 

Et de même cela vous rendre à l'attributs alt:

'//html/body/div/img[@class="photo"]/@alt' 

De là, vous pouvez obtenir le texte de l'attribut. Si vous voulez trouver que ceux qui correspondent à 'large_image_display' alors vous filtrer plus comme ceci:

1

Utilisez les expressions XPath suivantes:

/html/body/div[@id='large_image_display']/img/@src 

et

/html/body/div[@id='large_image_display']/img/@alt 

Toujours essayer d'éviter d'utiliser le//abréviation, car cela peut entraîner une évaluation très inefficace (entraîne l'analyse de la totalité de l'arborescence (sous)).

Dans ce cas particulier, nous savons que l'élément html est l'élément supérieur du document et nous pouvons simplement le sélectionner par /html - pas .

Votre problème majeur était que dans vos expressions que vous utilisiez \ et \\ et il n'y a pas de tels opérateurs XPath. Les opérateurs XPath corrects que vous essayiez d'utiliser sont / et l'abréviation //.