0

我正在尝试解析以下 HTML 文件,我想要获取键的值。这是在 Silverlight for Windows phone 上完成的。

</tr>
<tr><td width="26"><div style="width: 26px; height: 1px;"><spacer type="block" width="26" height="1" /></div></td><td width="60" id="tbtime">10:00</td><td width="70%" id="tbcol"><a href="/repertoir/filminfo.php?id=596">Ральф</a></td><td width="30%" id="tbcol" align="center">100 руб.</td></tr><tr><td width="26" height="4"><div style="width: 26px; height: 4px;"><spacer type="block" width="26" height="4" /></div></td><td width="60"></td><td width="100%" colspan="2"></td></tr><tr><td width="26"><div style="width: 26px; height: 1px;"><spacer type="block" width="26" height="1" /></div></td><td width="60" id="tbtime">12:00</td><td width="70%" id="tbcol"><a href="/repertoir/filminfo.php?id=595"> Сумерки. Сага. Рассвет: Часть 2</a></td><td width="30%" id="tbcol" align="center">100 - 120 руб.</td></tr><tr><td width="26" height="4"><div style="width: 26px; height: 4px;"><spacer type="block" width="26" height="4" /></div></td><td width="60"></td><td width="100%" colspan="2"></td></tr><tr><td width="26"><div style="width: 26px; height: 1px;"><spacer type="block" width="26" height="1" /></div></td><td width="60" id="tbtime">14:20</td><td width="70%" id="tbcol"><a href="/repertoir/filminfo.php?id=595"> Сумерки. Сага. Рассвет: Часть 2</a></td><td width="30%" id="tbcol" align="center">120 - 150 руб.</td></tr><tr><td width="26" height="4"><div style="width: 26px; height: 4px;"><spacer type="block" width="26" height="4" /></div></td><td width="60"></td><td width="100%" colspan="2"></td></tr><tr><td width="26"><div style="width: 26px; height: 1px;"><spacer type="block" width="26" height="1" /></div></td><td width="60" id="tbtime">16:40</td><td width="70%" id="tbcol"><a href="/repertoir/filminfo.php?id=607">Бункер</a></td><td width="30%" id="tbcol" align="center">150 руб.</td></tr><tr><td width="26" height="4"><div style="width: 26px; height: 4px;"><spacer type="block" width="26" height="4" /></div></td><td width="60"></td><td width="100%" colspan="2"></td></tr><tr><td width="26"><div style="width: 26px; height: 1px;"><spacer type="block" width="26" height="1" /></div></td><td width="60" id="tbtime">18:40</td><td width="70%" id="tbcol"><a href="/repertoir/filminfo.php?id=595"> Сумерки. Сага. Рассвет: Часть 2</a></td><td width="30%" id="tbcol" align="center">150 - 180 руб.</td></tr><tr><td width="26" height="4"><div style="width: 26px; height: 4px;"><spacer type="block" width="26" height="4" /></div></td><td width="60"></td><td width="100%" colspan="2"></td></tr><tr><td width="26"><div style="width: 26px; height: 1px;"><spacer type="block" width="26" height="1" /></div></td><td width="60" id="tbtime">21:00</td><td width="70%" id="tbcol"><a href="/repertoir/filminfo.php?id=595"> Сумерки. Сага. Рассвет: Часть 2</a></td><td width="30%" id="tbcol" align="center">150 - 180 руб.</td></tr><tr><td width="26" height="4"><div style="width: 26px; height: 4px;"><spacer type="block" width="26" height="4" /></div></td><td width="60"></td><td width="100%" colspan="2"></td></tr></table>
<br /><br />
<br /><br />

 public void myparsing()
    {          
       HtmlAgilityPack.HtmlDocument document = new HtmlAgilityPack.HtmlDocument();
        WebClient webClient = new WebClient();
        document.LoadHtml(webClient.DownloadString("http://udokan.chita.ru/"));
        var node = document.DocumentNode.SelectSingleNode("//body/table/tr/td[4]/table");
        if (node != null)
        {
            var innerText = node.InnerText;              
            richTextBox1.AppendText(innerText);
        }       

    }

我想获得有关曲目的信息,但我不能。我有 HttpAgilityPack 的问题。方法 SelectNodes 不起作用。请帮助我,我很抱歉我的英语不好。

4

2 回答 2

0

我不是 100% 确定,但从我的脑海中我有一个想法:

请记住,WebClient 和 Silverlight 是异步工作的。因此,在将 Html 传递给 LoadHtml 方法之前,请确保已下载 Html。因此最好使用 DownloadStringAsync 并将文档加载到完整的回调中。

我将从作为字符串的 html 源代码的副本开始,并检查 XPath 查询是否正确。

查看您的 html 网站和源代码没有“//body/table/tr/td[4]/table”

//body/table 中有 1 个表,它有 4 个 TD 元素,但请记住,这是一个基于零的索引数组......所以 td[3] 将是第四个元素......

所以这些只是一些想法,我希望它有所帮助..

于 2012-11-21T08:17:46.170 回答
0

你可以这样做:

        public void MyParsing()
    {
        const string baseUrl = "http://udokan.chita.ru/";
        var htmlDoc = new HtmlDocument();
        var webClient = new WebClient();
        htmlDoc.LoadHtml(webClient.DownloadString(baseUrl));
        var htmlNodeCollection = htmlDoc.DocumentNode.SelectNodes("//a[@href]");
        if (htmlNodeCollection != null)
        {
            foreach (var link in htmlNodeCollection)
            {
                try
                {
                    if(link.Attributes["href"].Value.Contain("repert"))
                    {
                    var newUrl = new Uri(new Uri(baseUrl), link.Attributes["href"].Value).AbsoluteUri;
                    var queries = HttpUtility.ParseQueryString(string.Join(string.Empty, newUrl.Split('?').Skip(1)));
                    var id = queries["id"];
                    richTextBox1.AppendText(id);
                    }
                }
                catch (Exception)
                {
                }
            }
        }

    }
于 2012-11-21T08:18:31.837 回答