【问题标题】:Parse HTML Page with Agility Pack WP8使用 Agility Pack WP8 解析 HTML 页面
【发布时间】:2014-04-23 19:22:09
【问题描述】:

我要解析这个文件:(仅重要部分)

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
...
</head>
<body onload="Xaprb.InputMask.setupElementMasks()">
<div align="center">
        <table> ... </table>
        <table width="900" height="500" border="0" cellpadding="0"
            cellspacing="0" class="content">
        <tr>
    <td width="45">&nbsp;</td>
    <td width="210" valign="top">
    <div class="np_table">
        <div class="np_bl">
            <div class="np_br">
                <div class="np_tl">
                    <div class="np_tr">
                    <span class="name_heading">Hello</span><br />
                    <span class="name_content">**NAME I NEED**</span><br />
                    <br /> <span class="name_heading">Number:</span><br />
                    <span class="name_content">**NUMBER I NEED**</span>
                    </div>
                </div>
            </div>
        </div>
    </div> <br>

    <div class="menu"> ... </div>

    <p>&nbsp;</p>
    </td>
    <td width="600" valign="top">
        <div class="content_table">
        <div class="ct_bl">
            <div class="ct_br">
                <div class="ct_tl">
                    <div class="ct_tr">
                       <span class="heading">...</span>
                       <p><b>**I need this number too: 250**</b> <br />
               <br />
               Here is the datum I want: **17-04-2014**. <br />
               Please do not...</p>
               <p><b>...</b></p>
    <br /><br>
                 </div>
            </div>
        </div>
      </div>
    </div>
    </td>
</body>
</html>

现在我想要四个字符串,两个数字,日期和名字。我有这个代码:

HttpClient client = new HttpClient();
var doc = new HtmlAgilityPack.HtmlDocument();
var html = await client.GetStringAsync("http://example.com");
doc.LoadHtml(html);

var name = ???
var numberone = ???
var numbertwo = ???
var date = ???

但我不知道我是如何通过 HTML Agility Pack 获得这些信息的。有人可以帮助我吗?或者给我提示?

【问题讨论】:

标签: c# html parsing windows-phone-8


【解决方案1】:

我们可以使用 XPath 查询使用 HtmlAgilityPack 选择 HTML 文档的特定部分。因此,请阅读一些 XPath 教程以开始使用:

例如,要从这个问题的示例 HTML 中获取 NAME I NEED

var name = 
    doc.DocumentNode
       .SelectSingleNode("//span[@class='name_content' and .='Hello']/following-sibling::span[1]");
if(name!= null) Console.WriteLine(name.InnerText);

上述示例中使用的 XPath 说明:

//span

  • 扫描整个文档以查找&lt;span&gt; 元素...

[@class='name_content' and .='Hello']

  • 类属性值等于"name_content",元素值等于"Hello"

/following-sibling::span[1]

  • 然后从当前&lt;span&gt; 获取,最近的&lt;span&gt; 类型的兄弟元素...

【讨论】:

  • 谢谢!这是用于名称,但编号项目也在类名 = 'name_content' 的跨度元素中,对于第二个数字,有类名 = 'ct_tr' 的元素 dir,但我该如何阅读特定元素 var numbertwo 中的第一个数字和特定元素 var date 中的日期?
  • 修复了我的样本,r 我的意思是name。一个问题有很多工作要解决。所以我给出了一个示例,您尝试找出可能用于选择其余部分的标准,然后尝试将标准转换为 XPath 查询。无论您遇到什么困难,都可以提出一个问题,说明您尝试和研究了多远
  • 好的我现在明白了,谢谢帮助!我得到了它的其余部分! :)
猜你喜欢
  • 2014-08-31
  • 2011-01-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-06-04
  • 2014-07-13
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多