Xpath selecciona todos los nodos hijos

html html-agility-pack xpath

Pregunta

Necesito seleccionar todos los nodos secundarios (etiqueta de opción) de este 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>

Yo uso el paquete de agilidad Html.

Intento esto:

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

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

pero me sale un error que xpath tiene un token inválido. ¿Qué está mal?

Por ejemplo:

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

Necesito obtener valor (a_0) y texto VÅ¡etci.

Así que intento primero acceder para seleccionar por Id:

Respuesta aceptada

Intento esto:

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

pero me sale un error que xpath tiene un token inválido. ¿Qué está mal?

El problema obvio es el uso de

option::*

option::* significa: Todos los nodos en el eje "option". Sin embargo no hay "eje de opción en XPath"

Tu quieres

option

Esto selecciona todos los elementos de option que son hijos del nodo actual.

Puede escribir esto en una sola expresión XPath y omitir la llamada getElementbyId() :

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

For example:

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

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

Uso :

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

Esto selecciona todos los atributos de value de todos los elementos de option que son hijos de todos select elementos de select en el documento XML que tienen un atributo de id con el valor 'onoffaci' y también todos los nodos de texto de todos los elementos de option que son hijos de todos select elementos de select en el documento XML que tienen un atributo id con valor 'onoffaci' .

Deberá iterar los resultados para obtener @value y text() para cada elemento de option .

O:

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

Aquí usa la observación de que el elemento de option que está interesado es la primera option hijo de su padre: ahora esto selecciona solo el atributo de value y los nodos de texto del elemento de option deseada.



Licencia bajo: CC-BY-SA with attribution
No afiliado con Stack Overflow
¿Es esto KB legal? Sí, aprende por qué
Licencia bajo: CC-BY-SA with attribution
No afiliado con Stack Overflow
¿Es esto KB legal? Sí, aprende por qué