3
4

2 に答える 2

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 に答える
1

あなたの問題はheader.ParentNode.SelectSingleNode(".//a[contains(@href, '#')]")声明のようです。親要素に戻り、基準に一致するdiv最初の要素を見つけaます (これは常に同じです)。すでにaノードを持っているので、別の選択を行うのではなく、そのプロパティを介してその属性を確認することができます。ただし、次のように、最初に単一の選択を実行して絞り込むことができる場合に、2 番目の選択を実行するのはばかげています。

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 に答える