我在解析有值的单选按钮和跨度
上的innertext时遇到问题Mark Up
<div id="First" class="Size-Inputs">
<input rel="8" type="radio" value="13051374" name="idProduct-13051359"/> <span rel="L">L</span>
<input rel="8" type="radio" value="13051373" name="idProduct-13051359"/> <span rel="M">M</span>
<input rel="8" type="radio" value="13051372" name="idProduct-13051359"/> <span rel="S">S</span>
<input rel="8" type="radio" value="13051375"name="idProduct-13051359"/> <span rel="XL">XL</span> </div>
我遇到的问题是,跨度名称一次只出现一个字母,即“L”。价值正常,但我无法弄清楚出了什么问题。
HtmlNodeCollection link = doc.DocumentNode.SelectNodes("//*[@id='First']/input");
//HtmlNodeCollection name = doc.DocumentNode.SelectNodes("//*[@id='First']/span");
if (link != null)
{
foreach (HtmlNode item in link)
{
if (item != null)
{
string name = item.SelectSingleNode("//*[@id='First']/span").InnerText;
string value = item.Attributes["value"].Value;
Console.WriteLine(name);
Console.WriteLine(value);
}
}
Console.ReadLine();
}
我只是想知道是否有人可以给我任何建议如何使用一个Xpath然后循环遍历所有的单位名称和单选按钮的值。所以控制台打印出所有的跨度名称和值。感谢您提出的任何建议
答案 0 :(得分:1)
您可以尝试这种方式:
HtmlNodeCollection link = doc.DocumentNode.SelectNodes("//*[@id='First']/span");
if (link != null)
{
foreach (HtmlNode item in link)
{
string name = item.InnerText;
string value = item.SelectSingleNode("./preceding-sibling::input[1]").Attributes["value"].Value;
Console.WriteLine(name);
Console.WriteLine(value);
}
Console.ReadLine();
}
基本上用于获取value
的XPath语句意味着:选择直接在当前<input>
元素的兄弟之前的<span>
元素,然后获取它的value
属性。其余的已经解释过here。
答案 1 :(得分:0)
var links = htmlDoc.DocumentNode.SelectNodes("//*[@id='First']/input[@value]");
if (links != null)
{
foreach (var link in links)
{
string value = link.Attributes["value"].Value;
string name = null;
var span = link.SelectSingleNode("following-sibling::span");
if (span != null)
{
name = span.InnerText;
}
Console.WriteLine(name + " - " + value);
}
}