HTML敏捷性解析
我想解析一个HTML表格,并在绑定列表框中使用XML解析LINQ中的内容。HTML敏捷性解析
我使用的HTML敏捷包和使用此代码。
HtmlWeb web = new HtmlWeb();
HtmlAgilityPack.HtmlDocument doc = web.Load("http://www.SourceURL");
HtmlNode rateNode = doc.DocumentNode.SelectSingleNode("//div[@id='FlightInfo_FlightInfoUpdatePanel']");
string rate = rateNode.InnerText;
this.richTextBox1.Text = rate;
的HTML看起来像这样..
<div id="FlightInfo_FlightInfoUpdatePanel">
<table cellspacing="0" cellpadding="0"><tbody>
<tr class="">
<td class="airline"><img src="/images/airline logos/NZ.gif" title="AIR NEW ZEALAND LIMITED. " alt="AIR NEW ZEALAND LIMITED. " /></td>
<td class="flight">NZ8</td>
<td class="codeshare"> </td>
<td class="origin">San Francisco</td>
<td class="date">01 Sep</td>
<td class="time">17:15</td>
<td class="est">18:00</td>
<td class="status">DEPARTED</td>
</tr>
但它返回这个
NZ8 San Francisco01 Sep17:1518:00DEPARTEDAC6103NZ8San Francisco01 Sep17:1518:00DEPARTEDCO6754NZ8San Francisco01 Sep17:1518:00DEPARTEDLH7157NZ8San Francisco01 Sep17:1518:00DEPARTEDUA6754NZ8San Francisco01 Sep17:1518:00DEPARTEDUS5308NZ8San Francisco01 Sep17:1518:00DEPARTEDVS7408NZ8San Francisco01 Sep17:1518:00DEPARTEDEK407 Melbourne/Dubai01 Sep17:5017:50DEPARTEDEK413 Sydney/Dubai01 Sep18:0018:00DEPARTEDQF44 Sydney01
我想什么是pasrse这对XML格式,然后使用LINQ到XML将XML解析为绑定列表框项目源。
我想我需要为每个班级使用下面的变体,但想要一些帮助。
HtmlNodeCollection cols = rows[i].SelectNodes(".//td[@class='flight']");
您正在使用InnerText
去掉HTML。
使用InnerHtml
:
string rate = rateNode.InnerHtml;
您可以从该字符串的XML文档(假设它是有效的XML)。
您还可以查询rateNode
在您检索它以同样的方式 - 选择它的子节点:
var firstRow = rateNode.SelectSingleNode("./table/tbody/tr[0]");
string origin = firstRow.SelectSingleNode("./td[@class = 'origin']");
如果你想用的LINQ to XML来工作,你可以改变的HTMLDocument到XML字符串:
HtmlWeb web = new HtmlWeb();
HtmlAgilityPack.HtmlDocument doc = web.Load("http://www.SourceURL");
doc.OptionOutputAsXml = true;
System.IO.StringWriter sw = new System.IO.StringWriter();
System.Xml.XmlTextWriter xw = new System.Xml.XmlTextWriter(sw);
doc.Save(xw);
string result = sw.ToString();
然后你只需要创建一个XDocument客体和负载与XML字符串:
System.Xml.Linq.XDocument xDoc = System.Xml.Linq.XDocument.Parse(result);
现在你有一个XDocument和Linq一起玩。
但是,只有当html是有效的xml时才能工作HtmlAgilityPack也可以用纯html工作 –
它可以输出有效的XML我错过了添加doc.OptionOutputAsXml = true;句子 –
@alejandro谢谢你,但是,HTML不是XML,也非常混乱,所以HTML敏捷包可能是我的最佳选择,尽管我给了你一个建议。 – Rhys
任何示例代码的机会?我无法让我的头解析该div中的多个类,然后到xml – Rhys
谢谢你,我似乎有它的工作,虽然它只返回第一个结果,并有数百它需要返回 – Rhys
@Rhys - 你可能需要一个节点集,而不是一个节点。例如:'var rows = rateNode.SelectNodes(“./ table/tbody/tr”);'并迭代结果。 – Oded