Я пытаюсь это сделать:
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
.