Xpath選擇所有子節點

html html-agility-pack xpath

我需要從這個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進行選擇:

一般承認的答案

我試試這個:

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

但我得到xpath有無效令牌的錯誤。有什麼不好?

顯而易見的問題是使用

option::*

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文檔中的元素具有值'onoffaci'id屬性。

您需要迭代結果以獲取每個option元素的@valuetext()

要么:

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

在這裡,您可以使用以下觀察結果:您感興趣的option元素是其父option的第一個option子項 - 現在,它僅選擇所需option元素的value屬性和文本節點。



Related

許可下: CC-BY-SA with attribution
不隸屬於 Stack Overflow
許可下: CC-BY-SA with attribution
不隸屬於 Stack Overflow