Зачистка документа XHTML - PullRequest
       6

Зачистка документа XHTML

0 голосов
/ 30 марта 2011

Я учусь использовать HTML Agility Pack для очистки страницы, но не знаю, что делать.

Например, вот одна страница: http://gtin13.com/query.jsp?query=Hunts

Янадеясь добавить в базу данных следующее:

Поле1: Hunts Sp Pdg Chc Fdg
Поле 2: 14 Oz
Поле 3: Size 12 ct
Поле 4: 0027000411766
Поле 5: 00-27000-41176-6
Поле 6: 027000411766
Поле 7: 02700041176

Существует несколько таких на страницу.

Вот часть HTML:

<div class="PostContent">
    <b><a href="/product/hunts+sp+pdg+chc+fdg+14+00+oz/">Hunts Sp Pdg Chc Fdg 14.00 Oz</a></b><br />
    Size: 12 ct<br />
    GTIN/EAN-13: 0027000411766 / 00-27000-41176-6<br />
    UPC-A: 027000411766 / 02700041176<br />

    Tags:
    <a href="/tag/hunts/">Hunts</a>, 
     ..<br />
    <br >


    <b><a href="/product/m-hunts+snk+pk+chc+var/">M-Hunts Snk Pk Chc Var</a></b><br />
    Size: 14 oz<br />
    GTIN/EAN-13: 0027000410868 / 00-27000-41086-8<br />
    UPC-A: 027000410868 / 02700041086<br />
    <br >


    <b><a href="/product/hunts+snk+pk+mud+pie+4pk/">Hunts Snk Pk Mud Pie 4pk</a></b><br />
    Size: 14 oz<br />
    GTIN/EAN-13: 0027000412817 / 00-27000-41281-7<br />
    UPC-A: 027000412817 / 02700041281<br />
    <br >
</div>

Как я могу это сделать?

1 Ответ

0 голосов
/ 16 октября 2011

Это возможно, но это будет нелегко. К сожалению содержание выкладывается неловко. Просто надо от него избавиться. Глядя на некоторые из перечисленных вещей, я не вижу никакого осмысленного способа определить, какими должны быть ваши Field2 части.

Имеется класс для хранения ваших данных:

public class Data
{
    public string Name  { get; set; }
    public string Size  { get; set; }
    public string Gtin  { get; set; }
    public string Ean13 { get; set; }
    public string Upc   { get; set; }
    public string UpcA  { get; set; }
}

Чтобы получить данные:

var web = new HtmlWeb();
var doc = web.Load("http://gtin13.com/query.jsp?query=Hunts");

var sections = doc.DocumentNode.SelectNodes("//div[@class='PostContent']/b");
var result = new List<Data>();
foreach (var header in sections)
{
    var data = new Data();
    data.Name = header.InnerText.Trim();
    var currentField = header.NextSibling.NextSibling;

    var sizeMatch = Regex.Match(currentField.InnerText.Trim(), @"Size: (.+)");
    if (sizeMatch.Success)
    {
        data.Size = sizeMatch.Groups[1].Value;
        currentField = currentField.NextSibling.NextSibling;
    }

    var gtinMatch = Regex.Match(currentField.InnerText.Trim(), @"GTIN/EAN-13: (\S+) / (\S+)");
    if (gtinMatch.Success)
    {
        data.Gtin = gtinMatch.Groups[1].Value;
        data.Ean13 = gtinMatch.Groups[2].Value;
        currentField = currentField.NextSibling.NextSibling;
    }

    var upcMatch = Regex.Match(currentField.InnerText.Trim(), @"UPC-A: (\S+) / (\S+)");
    if (upcMatch.Success)
    {
        data.Upc = upcMatch.Groups[1].Value;
        data.UpcA = upcMatch.Groups[2].Value;
    }

    result.Add(data);
}
...