Xpath sélectionner tous les nœuds enfants

html html-agility-pack xpath

Question

J'ai besoin de sélectionner tous les nœuds enfants (balise option) de ce code HTML:

<select name="akt-miest" id="onoffaci">
<option value="a_0">VÅ¡etci</option>
<option value="a_1">Iba prihlásení</option>
<option value="a_5" selected="selected">Teraz na Pokeci</option>

<optgroup label="Hlavné miestnosti">

<option value="m_13">&nbsp;&nbsp;&nbsp;Bez záväzkov</option>
<option value="m_9">&nbsp;&nbsp;&nbsp;Do pohody</option>
<option value="m_39">&nbsp;&nbsp;&nbsp;Dámsky klub</option>

</optgroup>

J'utilise le pack d'agilité HTML.

J'essaye ceci:

 var selectNode = htmlDoc.GetElementbyId("onoffaci");

 var nodes = selectNode.SelectNodes("option::*");

mais j'obtiens une erreur que xpath a un jeton invalide. Qu'est ce qui est mauvais?

Par exemple:

<option value="**a_0**">**VÅ¡etci**</option>

J'ai besoin d'obtenir la valeur (a_0) et le texte Váetci.

J'essaie donc d'abord de sélectionner par ID:

Réponse acceptée

J'essaye ceci:

var selectNode = htmlDoc.GetElementbyId("onoffaci");   
var nodes = selectNode.SelectNodes("option::*"); 

mais j'obtiens une erreur que xpath a un jeton invalide. Qu'est ce qui est mauvais?

Le problème évident est l'utilisation de

option::*

option::* signifie: tous les nœuds de l’axe "option". Cependant, il n'y a pas "d'axe d'option dans XPath"

Tu veux :

option

Ceci sélectionne tous les éléments d' option qui sont des enfants du nœud actuel.

Vous pouvez écrire ceci dans une seule expression XPath et omettre l'appel getElementbyId() :

//select[@id='onoffaci']/option

For example:

    <option value="**a_0**">**VÅ¡etci**</option>

I need get value (a_0) and text VÅ¡etci

Utiliser :

    //select[@id='onoffaci']/option/@value 
|
    //select[@id='onoffaci']/option/text()

Ceci sélectionne tous les attributs de value de tous les éléments d' option qui sont les enfants de tous select éléments de select du document XML ayant un attribut id avec la valeur 'onoffaci' ainsi que tous les nœuds de texte de tous les éléments d' option qui sont les enfants de tous select éléments de select du document XML qui ont un attribut id avec la valeur 'onoffaci' .

Vous devrez itérer les résultats pour obtenir les @value et text() de chaque élément option .

Ou:

    //select[@id='onoffaci']/option[1]/@value 
|
    //select[@id='onoffaci']/option[1]/text()

Ici, vous utilisez l'observation que l'élément d' option qui vous intéresse est la première option de son parent - maintenant, cela sélectionne uniquement l'attribut value et les nœuds de texte de l'élément d' option souhaité.




Sous licence: CC-BY-SA with attribution
Non affilié à Stack Overflow
Est-ce KB légal? Oui, apprenez pourquoi
Sous licence: CC-BY-SA with attribution
Non affilié à Stack Overflow
Est-ce KB légal? Oui, apprenez pourquoi