Xpath выбрать все дочерние узлы - PullRequest
2 голосов
/ 21 января 2011

Мне нужно выбрать все дочерние узлы (тег option) из этого 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>

Я использую пакет гибкости Html.

Я пытаюсь это:

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

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

но я получаю ошибку, что xpath имеет недопустимый токен. Что плохого?

Например:

<option value="**a_0**">**Všetci**</option>

Мне нужно получить значение (a_0) и текст Všetci.

Итак, я вначале пытаюсь получить доступ по Id:

1 Ответ

3 голосов
/ 21 января 2011

Я пытаюсь это сделать:

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

, но я получаю сообщение об ошибке, что xpath имеет недопустимый токен.Что плохого?

Очевидная проблема - использование

option::*

option::* означает: все узлы вось «опция».Однако "опция оси в XPath" отсутствует

Требуется :

option

. Выбирает все элементы option, которые являются дочерними элементами текущего узла.

Вы можете записать это в одном выражении XPath и опустить вызов getElementbyId():

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

For example:

    <option value="**a_0**">**Všetci**</option>

I need get value (a_0) and text Všetci

Использовать :

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

При этом выбираются все атрибуты value всех элементов option, являющихся дочерними для всех элементов select в документе XML, имеющих атрибут id со значением 'onoffaci', а также всех текстовых узлов всех option элементы, являющиеся потомками всех select элементов в XML-документе, которые имеют атрибут id со значением 'onoffaci'.

. Вам нужно будет повторить результаты, чтобы получить @value и text() для каждого option элемента.

Или:

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

Здесь вы используете наблюдение о том, что интересующий вас элемент option является первым option дочерним элементом егоparent - теперь при этом выбираются только атрибут value и текстовые узлы искомого элемента option.

...