1

Web サイトからニュース項目を取得するアプリを作成していますが、dd タグを持つノードを見つけることができません。

私がどこで間違っているのかについてのアイデアはありますか?

HTML

<h1>INFO: New Prices</h1>
<dl class='table'>
    <dt>Department:</dt><dd>Sales</dd>
    <dt>Start Date:</dt><dd>28/06/2012</dd>
    <dt>End Date:</dt><dd>20/07/2012</dd>
    <dt>Approved Date:</dt><dd>Jun 28 2012  3:11PM</dd>
</dl>

C# コード

public void CollectNewsItem(UInt64 aSID)
{
    String URL = WebReader.storyLink + "?SID=" + aSID;

    HtmlWeb hw = new HtmlWeb();
    HtmlDocument document = hw.Load(URL);

    HtmlNode n = document.DocumentNode.SelectSingleNode("//h1");

    Console.WriteLine("Title: " + n.InnerText);

    HtmlNodeCollection nodes = document.DocumentNode.SelectNodes("//dd");

    foreach (HtmlNode node in nodes)
    {
        Console.WriteLine(node.InnerText);
    }

}
4

2 に答える 2

0

HtmlAgilityPack を使用する場合は、LINQ にドロップすることを好みます。この場合、select は次のようになります。

IEnumerable<HtmlNode> nodes = document.DocumentNode.Descendants("dd");
于 2012-06-30T03:33:41.327 に答える
0

これは、このスレッドによる正しい方法です。

これらのタグを解析する方法は?

動作していることを確認するには、次のようにします。

var node = document.DocumentNode.SelectSingleNode("//[dt='Department:']");

dt少なくとも最初のものをピックアップする必要があります。そうでない場合は、HTML マークアップのどこかに問題があり、パーサーが混乱しているに違いありません。:)

HTML を単純な HTML ファイルにコピーして貼り付け、コードを入力します。

この行を置き換えます (一重引用符で囲まれた表):

<dl class='table'>

これで(二重引用符の間の表):

<dl class="table">

上記の方法でもうまくいかない場合は、各<\dt>タグを閉じる前にコロン ( : ) を削除してみてください。これを実行して、問題の原因を突き止めます。

于 2012-06-29T12:21:00.303 に答える