2009-11-16 4 views
1

J'interroge un fichier HTML particulièrement laid en utilisant xpath. Je veux extraire un tableau HTML enfoui profondément dans le document. Cependant, au lieu de descendre dans la hiérarchie à partir de // html /, y a-t-il de toute façon une référence à l'attribut id unique de la table?Xpath noob: interroger un élément xml en utilisant xpath et un attribut unique?

Évidemment, cela aurait beaucoup moins de chance de casser en raison des modifications de page aussi.

Répondre

2
descendant::*[@id='whatever'] 

Si le « ID » était pas unique, vous obtiendrez une liste de tous les noeuds correspondant.

+0

Alternativement, '// * [@ id = 'quelquechose']' fera le même travail. Mais je ne veux pas enlever à la bonne réponse de Mihi. +1 – Welbog

+0

cela ne ferait-il pas ressortir l'ID seulement quand il est égal à 'quoi que ce soit'? Je pensais qu'il demandait comment obtenir l'attribut id indépendamment de sa valeur. – ChadNC

+0

merci - et si c'était unique parmi les éléments div, pourrais-je obtenir une correspondance via '// div [@ id = "datafiles"]'? – rutherford

0

quelque chose comme

xpath.evaluate("/html/body/table[@id]"); 

Il a été un moment que je XPath pour que peut-être pas tout à fait correct mais il est proche.

+0

ChadNC, vous êtes proche. Cela ne fera correspondre qu'une table qui est un enfant direct de l'élément body qui contient un attribut nommé "id". Ce que vous voulez, c'est quelque chose comme quoi mihi (http://stackoverflow.com/questions/1744651/xpath-noob-querying-an-xml-element-using-xpath-and-a-unique-attribute/1744694#1744694) dit . Ou xpath.evaluate ("// table [@id = 'tableId']") où 'tableId' est l'identifiant unique recherché. –

+0

Rogers. C'était juste un exemple simple qui ne trouverait que ce que vous avez dit. Je pensais qu'il/elle pourrait l'adapter à leurs besoins spécifiques. Mais je n'avais pas pensé à utiliser "// table [@ id = 'tableid']" que je pense utiliser assez rapidement :) – ChadNC

1

Vous pouvez aussi utiliser:

//table[@id='yourId'] 

Le // correspond à l'élément partout dans le document, la « table » correspond uniquement des éléments de table et le filtre (entre les crochets) ne récupère que l'élément avec votre identifiant.

Questions connexes