问问题
481 次
2 回答
1
看起来你的问题是header.ParentNode.SelectSingleNode(".//a[contains(@href, '#')]")
陈述。它会将您带回到父div
元素,然后找到a
与条件匹配的第一个元素(始终是同一个元素)。您已经拥有该a
节点,因此您可以通过其属性检查它的属性,而不是进行另一个选择。但是,当您可以只进行一次选择以首先缩小范围时,进行第二次选择是愚蠢的,例如:
HtmlNodeCollection headers = _markup.DocumentNode.SelectNodes("//div[contains(@id, 'infor')]/a[contains(@href, '#')]");
if (headers != null)
{
string genres = "";
foreach (HtmlNode header in headers) // i not sure what happens here.
{
genres += header.InnerText + ", ";
}
return genres;
}
于 2012-05-22T15:14:24.807 回答
1
我想,一点 Linq 和使用 Descendants 会让你更轻松。
var genreNode = _markup.DocumentNode.Descendants("div").Where(n => n.Id.Equals("genre")).FirstOrDefault();
if (genreNode != null)
{
// this pulls all <a> nodes under the genre div and pops their inner text into an array
// then joins that array using the ", " as separator.
return string.Join(", ", genreNode.Descendants("a")
.Where(n => n.GetAttributeValue("href", string.Empty).Equals("#"))
.Select(n => n.InnerText).ToArray());
}
于 2012-05-22T15:20:11.003 回答