Xpath选择所有子节点

时间:2011-01-21 13:27:33

标签: html xpath html-agility-pack

我需要从这个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 个答案:

答案 0 :(得分:3)

  

我试试这个:

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属性,这些元素属于XML文档中具有select属性且值为{{1}的所有id元素的子元素以及所有'onoffaci'元素的所有文本节点,这些元素是XML文档中具有option属性且值为select的所有id元素的子元素。

您需要迭代结果才能获得每个'onoffaci'元素的@valuetext()

或者:

option

在这里,您可以使用您感兴趣的 //select[@id='onoffaci']/option[1]/@value | //select[@id='onoffaci']/option[1]/text() 元素是其父级的第一个option子元素的观察结果 - 现在这只选择option属性和文本节点想要value元素。