C# - 将HTML源解析为XML

时间:2010-06-10 16:24:54

标签: c# html xml parsing

我想在动态URL中读取包含HTML文件的内容,并根据节点(HTML标记)将其读取为XML文件。这有可能吗?

我的意思是,有这个HTML代码:

            <table class="bidders" cellpadding="0" cellspacing="0"> 

            <tr class="bidRow4"> 
                <td>kucik (automata)</td> 
                <td class="right">9 374 Ft</td> 
                <td class="bidders_date">2010-06-10 18:19:52</td> 
            </tr> 

            <tr class="bidRow4"> 
                <td>macszaf (automata)</td> 
                <td class="right">9 373 Ft</td> 
                <td class="bidders_date">2010-06-10 18:19:52</td> 
            </tr> 

            <tr class="bidRow2"> 
                <td>kucik (automata)</td> 
                <td class="right">9 372 Ft</td> 
                <td class="bidders_date">2010-06-10 18:19:42</td> 
            </tr> 

            <tr class="bidRow2"> 
                <td>macszaf (automata)</td> 
                <td class="right">9 371 Ft</td> 
                <td class="bidders_date">2010-06-10 18:19:42</td> 
            </tr> 

            <tr class="bidRow0"> 
                <td>kucik (automata)</td> 
                <td class="right">9 370 Ft</td> 
                <td class="bidders_date">2010-06-10 18:19:32</td> 
            </tr> 

            <tr class="bidRow0"> 
                <td>macszaf (automata)</td> 
                <td class="right">9 369 Ft</td> 
                <td class="bidders_date">2010-06-10 18:19:32</td> 
            </tr> 

            <tr class="bidRow8"> 
                <td>kucik (automata)</td> 
                <td class="right">9 368 Ft</td> 
                <td class="bidders_date">2010-06-10 18:19:22</td> 
            </tr> 

            <tr class="bidRow8"> 
                <td>macszaf (automata)</td> 
                <td class="right">9 367 Ft</td> 
                <td class="bidders_date">2010-06-10 18:19:22</td> 
            </tr> 

            <tr class="bidRow6"> 
                <td>kucik (automata)</td> 
                <td class="right">9 366 Ft</td> 
                <td class="bidders_date">2010-06-10 18:19:12</td> 
            </tr> 

            <tr class="bidRow6"> 
                <td>macszaf (automata)</td> 
                <td class="right">9 365 Ft</td> 
                <td class="bidders_date">2010-06-10 18:19:12</td> 
            </tr> 

        </table> 

我想将其解析为ListView(或Grid)以创建包含数据的行。所有tr都是不同的行,给定td中的所有td都是给定行中的一列。

而且我希望它尽可能快,因为它会在5秒内更新。

有没有这个库?

4 个答案:

答案 0 :(得分:8)

我建议HTML Agility Pack。您必须自己处理GUI部分。它不需要有效的HTML,但会创建类似于XmlDocument的HtmlDocument。

答案 1 :(得分:0)

当然,这是可能的。但要注意 - 一个兼容的xml处理器应该将任何形式不正确的东西视为致命错误。这意味着它只能处理通过xhtml strict验证的文档。

答案 2 :(得分:0)

为什么不进行字符串替换以将HTML表转换为XML:

   <table class="bidders" cellpadding="0" cellspacing="0">

变为:

   <?xml version="1.0" encoding="UTF-8"?>

  <tr class="bidRow4">

变为

  <item>

 <td class="right">

变为

 <field1>

编辑1:

我认为DataSet类还有一个:

.ReadXML

方法,然后您可以数据绑定到该数据集:

    DataSet ds = new DataSet();
    ds.ReadXml("foo.xml");
    DataGrid.DataSource = ds;
    DataGrid.DataBind();

或类似的东西

答案 3 :(得分:0)

我通常会将Fast XPath Reader与LinqToXML结合使用。这是相当古老的(2007年)。

我不知道HTML Agility Pack,所以我不能说它是如何比较的(在性能和易用性方面)。