我想使用HtmlAgilityPack来解析HTML,但是遇到了问题。
示例HTML文档:
然后使用Xpath选择所有选项节点。
我只解析了前三个选项元素,因为我认为问题在于选择包含optgroup标签。
示例HTML文档:
<tr>
<td class="css_lokalita" colspan="4">
<select id="region" name="region">
<option value="0" selected>Všetky regiony</option>
<optgroup>Banskobystrický kraj</optgroup>
<option value="k_1" style="color: #000000; font-weight:bold;">Banskobystrický kraj</option>
<option value="1"> Banská Bystrica</option>
.
.
.
<option value="174"> CZ - Ústecký kraj</option>
<option value="175"> CZ - Zlínský kraj</option>
</select>
</td>
</tr>
<tr>
<td class="css_sfotkou" colspan="4">
<input type="checkbox" name="foto" value="1" id="foto" />
<label for="foto">Iba používatelia s fotkou</label>
</td>
</tr>
<tr>
<td class="css_miestnost" colspan="4">
<select name="akt-miest" id="onoffaci">
<option value="a_0">Všetci</option>
.
.
.
<optgroup label="Záľuby a záujmy">
<option value="m_1419307"> Bez Lásky</option>
.
.
.
<option value="m_1108016"> Drum N Bass</option>
</optgroup>
</select>
</td>
</tr>
我需要从<select name="akt-miest" id="onoffaci">
中解析值。
例如:
<option value="**a_0**">**Všetci**</option>
我需要获取值为**a_0**
和文本为**Všetci**
。
因此,我首先尝试通过ID访问选择器:
var selectNode = htmlDoc.GetElementbyId("onoffaci");
然后使用Xpath选择所有选项节点。
var nodes = selectNode.SelectNodes("//option");
获取数值:
foreach (var node in nodes)
{
string roomName = node.NextSibling.InnerText;
string roomId = node.Attributes["value"].Value;
rooms.Add(new Room { RoomId = roomId, RoomName = roomName });
}
但是我从另一个选择器中获取值 (<select id="region" name="region">
),这个选择器位于HTML代码的顶部。
编辑后:
我采用了Darin Dimitrov的建议并尝试了这个方法:
HtmlNode selectNode = htmlDoc.GetElementbyId("onoffaci");
var nodes = selectNode.SelectNodes("option");
foreach (var node in nodes)
{
string roomName = node.NextSibling.InnerText;
string roomId = node.Attributes["value"].Value;
rooms.Add(new Room { RoomId = roomId, RoomName = roomName });
}
return rooms;
我只解析了前三个选项元素,因为我认为问题在于选择包含optgroup标签。
<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"> Bez záväzkov</option>
<option value="m_9"> Do pohody</option>
<option value="m_39"> Dámsky klub</option>
</optgroup>
.
.
.
我尝试使用以下方法选择所有后续节点:
var nodes = selectNode.SelectNodes("option::*");
但是我遇到了这个错误:xpath有一个无效的标记。
我想要访问selectNode的所有子节点:
HtmlNode selectNode = htmlDoc.GetElementbyId("onoffaci");
编辑 #2:
这是一个完整的HTML文件,我需要解析其中的选项标签。