parsowanie HTMLa xpath

0

Witam,

mam pytanie dotyczące parsowania html-a korzystając z xpath

doszedłem do problemu którego nie mogę przeskoczyć.
otóż, mój kod wygląda następująco:

HtmlAgilityPack.HtmlDocument doc = new HtmlAgilityPack.HtmlDocument();
doc.LoadHtml(data);

        foreach (HtmlNode row in doc.DocumentNode.SelectNodes("//tr[@class = 'jakaś_klasa']"))
        {
            lb_result.Items.Add(row.InnerText);
        }
wyniki wyświetliłem sobie w listbox-ie, żeby zobaczyć czy pobiera mi dane ze strony i wszystko wygląda fajnie tylko że w każdym wierszy w listbox-ie wszystko jest jednym ciurkiem, nie ma przerw między poszczególnymi wartościami z tabeli ze strony www.

Pytanie moje brzmi tak. Jak wyniki parsowania wrzucić np do tabeli wielowymiarowej i jak to później wrzucić do bazy?

0

Nie da rady tego zrobić w listboxie. Nie możesz użyć innej kontrolki?

0

Tak jak napisałem wcześniej listbox posłużył mi tylko i wyłącznie do tego żebym widział, że otrzymuję jakieś wyniki parsowania. Ta linijka jest do przerobienia ale właśnie nie wiem jak wrzucić wyniki parsowania np. w tablicę lub coś innego.

0

Wrzuć to w TextBox w opcją Multiline. Jeśli chcesz to zapisać do bazy to wszystko zależy od tabeli jaką posiadasz i czy np używasz jakiegoś ORM'a

0

ja nie wiem czy się dobrze rozumiemy ma np. taki kod html (to oczywiście kod przykładowy)

<tr>
<td> wartosc1 </td>
<td> wartosc2 </td>
<td> wartosc3 </td>
</tr>
<tr>
<td> wartosc4 </td>
<td> wartosc5 </td>
<td> wartosc6 </td>
</tr>

wykorzystując kod

HtmlAgilityPack.HtmlDocument doc = new HtmlAgilityPack.HtmlDocument();
doc.LoadHtml(data);
        foreach (HtmlNode row in doc.DocumentNode.SelectNodes("//tr[@class = 'jakaś_klasa']"))
        {
            lb_result.Items.Add(row.InnerText); //nie patrzcie na to że korzystam tutaj z listboxa bochciałem tylko zobaczyć czy otrzymam jakiekolwiek wyniki
        }

w wyniku otrzymuję coś takiego :

wartosc1wartosc2wartosc3
wartosc4wartosc5wartosc6

czyli wizualnie nie można odróżnić gdzie kończy się wartosc1 i zaczyna wartosc2 bo ciąg jest jednolity.
Chodzi mi o to że poszczególne wartości chciałem wrzucić np. do tablicy, żeby w poszczególnych polach tablicy były pojedyncze wartości np. tab[1,1]=wartosc1; tab[1,2]=wartosc2 itd

Jak zrobić coś takiego?

0

Stwórz sobie jakąś klase typu HtmlElementWIthValue. Pewnie się gdzieś pomyliłem bo pisałem bez IDE.

public static IEnumerable<HtmlElementWithValue>(this HtmlDocument doc, string classToFind, string elemToFind)
{
 return  doc.DocumentNode.Descendants(elemToFind)
           .Where( d => d.Attributes.Contains(classToFind)
           .Select(e=>new HtmlElementWIthValue(){
                                   ElementName = elemToFind,
                                   ClassName = classToFind,
                                   Value = e.Attributes["classToFind"].Value}
            ).toList();
                                                                                               
}
0

dzięki za wpis, nie mam w tej chwili jak przetestować.
Ale po kodzie widzę że to jest jakaś inna technika niż xpath. Mi chodziło o wyciągnięcie jakichś powtarzających się sekwencji kodu z dużej strony www a ten kod chyba mi tego nie zrobi?

0

uzyj GetElementAtrribute();

1 użytkowników online, w tym zalogowanych: 0, gości: 1