以下是代码行,
<td class="line1left"><a href="scenario_WLM-16-SCENARIOS.html#population_SCN02_MS_AddNotes_CAM">SCN02_MS_AddNotes_CAM</a></td><td class="line1left">798 (6.14%)
</td><td class="line1left">0.9</td><td class="line1left">0s (<span> - %</span>)
</td><td class="line1left">0% (<span class="goodPercentage">-100%</span>)
</td>
<td class="line1left"><a href="scenario_WLM-16-SCENARIOS.html#population_SCN05_MS_UpdateCustomer_CAM">SCN05_MS_UpdateCustomer_CAM</a></td><td class="line1left">888 (6.83%)
</td><td class="line1left">1.0</td><td class="line1left">0s (<span> - %</span>)
</td><td class="line1left">0% (<span class="goodPercentage">-100%</span>)
</td>
从第一个区块开始,我需要获得SCN02_MS_AddNotes_CAM
和798
。要获得798
我正在使用此代码,但我也获得了(6.14%)
,这是我不想要的。
var content1 = doc1.DocumentNode.SelectNodes("//td[@class='line1left']")[1].InnerText;
我只想获得798
。那么有人可以帮助我吗?
我也想知道如何从第二个块获取相同的值。我的印象是括号内的数字表示类line1left
的不同出现次数。但这里它代表了不同的InnerHtml
元素。
[1]
有人知道如何让它发挥作用吗? 非常感谢提前。!
答案 0 :(得分:0)
var line1left_list = (from d in document.DocumentNode.Descendants()
where d.Name == "td " && d.Attributes["class"] != null
&& (d.Attributes["class"].Value == "line1left")
select d);
foreach (HtmlNode line1left in line1left_list)
{
var _link = line1left.Descendants("a").FirstOrDefault();
string linkUrl = "";
string link = "";
if (_link != null)
{
linkUrl = _link.Attributes["href"].Value;
link = _link.InnerText
}
}
答案 1 :(得分:0)
看起来你想要所有<td>
标签的InnerText,其class属性为&#34; line1left&#34;,除非<td>
里面有<a>
,在这种情况下,您需要<a>
。
这是一个可以做到这一点的例子。如果<td>
有<a>
,则会选择<a>
,否则会选择<td>
。
HtmlDocument doc1 = new HtmlDocument();
doc1.Load("xmlfile2.xml");
var nodes = doc1.DocumentNode.SelectNodes("(//td[@class='line1left']/a) | (//td[@class='line1left' and not(a)])");
foreach(var node in nodes)
Console.WriteLine(node.InnerText.Trim());
这将选择文档中的所有节点。您可以使用常规C#代码去除各个值上不需要的格式。