Analizza la tabella HTML in un file CSV (colspan e rowspan)

asp.net c# html-agility-pack html-parsing

Domanda

Voglio analizzare una tabella HTML in un file CSV, ma mantenendo il giusto numero di colspan e rowpspan.

Sto usando ";" come cella delimitatore . Quindi, quando c'è un colspan di 2 colonne, per esempio, invece di avere solo uno, ";", avrà 2.

Posso estrarre il contenuto della tabella e fare interruzioni di riga in cui gli indicatori tr terminano, ma non so come trattare colspan e rowspan .

HtmlNodeCollection rows = tables[0].SelectNodes("tr");

// Aux vars
int i;
// ncolspan

// For each row...
for (i = 0; i < rows.Count; ++i)
{
    // For each cell in the col...
    foreach (HtmlNode cell in rows[i].SelectNodes("th|td"))
    {
        /* Unsuccessful attempt to treat colspan
        foreach (HtmlNode n_cell in rows[i].SelectNodes("//td[@colspan]"))
        {
            ncolspan = n_cell.Attributes["colspan"].Value;
        }
        */

        text.Write(System.Text.RegularExpressions.Regex.Replace(cell.InnerText, @"\s\s+", ""));
        text.Write(";");
        /*
        for (int x = 0; x <= int.Parse(ncolspan); x++)
        {
            text.Write(";");
        }
        */
    }
    text.WriteLine();
    ncolspan = "0";
}

Qualsiasi aiuto, per favore? Grazie!

AGGIORNAMENTO: qui una semplice tabella di esempio da utilizzare:

HtmlNodeCollection rows = tables[0].SelectNodes("tr");

// Aux vars
int i;
// ncolspan

// For each row...
for (i = 0; i < rows.Count; ++i)
{
    // For each cell in the col...
    foreach (HtmlNode cell in rows[i].SelectNodes("th|td"))
    {
        /* Unsuccessful attempt to treat colspan
        foreach (HtmlNode n_cell in rows[i].SelectNodes("//td[@colspan]"))
        {
            ncolspan = n_cell.Attributes["colspan"].Value;
        }
        */

        text.Write(System.Text.RegularExpressions.Regex.Replace(cell.InnerText, @"\s\s+", ""));
        text.Write(";");
        /*
        for (int x = 0; x <= int.Parse(ncolspan); x++)
        {
            text.Write(";");
        }
        */
    }
    text.WriteLine();
    ncolspan = "0";
}

Risposta popolare

CSV non gestisce i valori di rowspan o colspan: è un formato molto semplice che non ha alcun concetto di colonne o righe oltre al delimitatore e al carattere di fine riga.

Se si desidera provare a preservare rowspan e colspan, sarà necessario utilizzare un modello di oggetto intermedio che è possibile utilizzare per memorizzare il contenuto specifico di una cella e la sua posizione, ad esempio, prima dell'esportazione del modello in CSV. E anche allora, il formato CSV non preserverà il colspan e il rowspan come si spera (ad esempio, come farebbe un foglio Excel).




Autorizzato sotto: CC-BY-SA with attribution
Non affiliato con Stack Overflow
È legale questo KB? Sì, impara il perché
Autorizzato sotto: CC-BY-SA with attribution
Non affiliato con Stack Overflow
È legale questo KB? Sì, impara il perché