Xpath seleziona tutti i nodi figli

html html-agility-pack xpath

Domanda

Ho bisogno di selezionare tutti i nodi figlio (tag opzione) da questo 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>

Uso il pacchetto di agilità Html.

Ci provo:

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

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

ma ottengo l'errore che xpath ha un token non valido. Cosa c'è di male?

Per esempio:

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

Ho bisogno di ottenere valore (a_0) e testo VÅ¡etci.

Così provo il primo accesso a selezionare per Id:

Risposta accettata

Ci provo:

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

ma ottengo l'errore che xpath ha un token non valido. Cosa c'è di male?

Il problema ovvio è l'uso di

option::*

option::* significa: tutti i nodi nell'asse "opzione". Tuttavia non esiste un "asse opzionale in XPath"

Vuoi :

option

Questo seleziona tutti gli elementi option che sono figli del nodo corrente.

Puoi scrivere questo in una singola espressione XPath e omettere la chiamata getElementbyId() :

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

For example:

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

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

Usa :

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

Seleziona tutti gli attributi di value di tutti gli elementi di option che sono figli di tutti gli elementi select nel documento XML che hanno un attributo id con valore 'onoffaci' e anche tutti i nodi di testo di tutti gli elementi di option che sono figli di tutti gli elementi select nel documento XML che hanno un attributo id con valore 'onoffaci' .

Sarà necessario iterare i risultati per ottenere @value e text() per ogni elemento option .

O:

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

Qui si usa l'osservazione che l'elemento option si è interessati è la prima option figlio del suo genitore - ora questo seleziona solo l'attributo value e i nodi di testo dell'elemento option desiderato.



Autorizzato sotto: CC-BY-SA with attribution
Non affiliato con Stack Overflow
È legale questo KB? Sì, impara il perché
Autorizzato sotto: CC-BY-SA with attribution
Non affiliato con Stack Overflow
È legale questo KB? Sì, impara il perché