PDA

View Full Version : سوال: عبارات با قاعده برای بدست اوردن مقادیر تگ های تو در تو



hercool
سه شنبه 22 مرداد 1392, 07:13 صبح
سلام دوستان
یه مشکلی که برام پیش اومده اینه که نمی تونم مقادیربین تگ هایی رو بدست بیارم که تو در تو هستن
مثلا برای بدست اوردن مقادیر تو در تو مثل این مشکل دارم



<tr class="GridItem" 2);">
<td><bdo dir="ltr">1389/09/30</bdo></td><td>160,520</td><td>149,498</td><td>25,365</td><td>36,243</td><td>33,594</td><td>33,594</td><td>0</td>
</tr>



البته چون چندین کد اینجوری پشت سر هم این شکلی هستن
می خوام مقادیر تگ های td بین یک tr در یک دسته قرار بگیرن

hercool
سه شنبه 22 مرداد 1392, 09:50 صبح
در بعضی سایت ها نوشته شده که باید از html parser استفاده کنیم که این پارسر ها یا با جاوا و یا با پیتون یا با پرل نوشته شدن
می خوام اگر راهی برای ایجاد عبارات با قاعده نیست منابعی برای اموزش ساخت پارسر در سی شاراپ بهم بدید تا بتونم تو محیط سی شاراپ ایجادش کنم
البته خوندم که میشه با عبارات با قاعده تودر تو رو حل کرد اما رفرنسی پیدا نکردم

tooraj_azizi_1035
سه شنبه 22 مرداد 1392, 13:41 عصر
How about something like: (Using HTML Agility Pack: http://www.codeplex.com/htmlagilitypack)

HtmlDocument doc = new HtmlDocument();
doc.LoadHtml(@"<html><body><p><table id=""foo""><tr><th>hello</th></tr><tr><td>world</td></tr></table></body></html>");
foreach (HtmlNode table in doc.DocumentNode.SelectNodes("//table")) {
Console.WriteLine("Found: " + table.Id);
foreach (HtmlNode row in table.SelectNodes("tr")) {
Console.WriteLine("row");
foreach (HtmlNode cell in row.SelectNodes("th|td")) {
Console.WriteLine("cell: " + cell.InnerText);
}
}
}

Note that you can make it prettier with LINQ-to-Objects if you want:

var query = from table in doc.DocumentNode.SelectNodes("//table").Cast<HtmlNode>()
from row in table.SelectNodes("tr").Cast<HtmlNode>()
from cell in row.SelectNodes("th|td").Cast<HtmlNode>()
select new {Table = table.Id, CellText = cell.InnerText};

foreach(var cell in query) {
Console.WriteLine("{0}: {1}", cell.Table, cell.CellText);
}