Domanda

Dati di gruppo in C #, ho analizzato il file HTML e prendi tutti i dati su di esso, ora voglio raggrupparli come segue:

Inserisci Descrizione dell'immagine qui

Quelle linee selezionate sono i genitori e contengono i seguenti figli, il codice che sto lavorando è qui:

var uricontent = File.ReadAllText("TestHtml/Bew.html");
            var doc = new HtmlDocument(); // with HTML Agility pack
            doc.LoadHtml(uricontent);

            var rooms = doc.DocumentNode.SelectNodes("//table[@class='rates']").SelectMany(
                detail =>
                {

                    return doc.DocumentNode.SelectNodes("//td[@class='rate-description'] | //table[@class='rooms']//h2 | //table[@class='rooms']//td[@class='room-price room-price-total']").Select(
                        r => new
                        {
                            RoomType = r.InnerText.CleanInnerText(),
                        });
                }).ToArray();
.

La roomype contiene i dati che sono analizzati da HTML AgilityPack, come posso raggrupparli con il nome come il pagamento e il salvataggio, la migliore camera disponibile ...

file HTML è qui: http://notepad.cc/share/g0zh0tcyag Grazie

È stato utile?

Soluzione

Invece di fare unione di 3 query XPath, cercando di raggrupparli da "Descrizione tariffa" (AKA per elemento: <td class="rate-description">), puoi farlo in un altro modo.

È possibile basare la selezione LINQ per "Tariffa Descrizione", quindi in parte di proiezione, ottenere tutti i tipi di camere e le tariffe delle camere sotto corrente "Descrizione tariffa" utilizzando relativo XPath:

var rooms = 
    doc.DocumentNode
       .SelectNodes("//table[@class='rates']//tr[@class='rate']")
       .Select(r => new
         {
            RateType = r.SelectSingleNode("./td[@class='rate-description']")
                        .InnerText.CleanInnerText,
            RoomTypes = r.SelectNodes("./following-sibling::tr[@class='rooms'][1]//table[@class='rooms']//h2")
                         .Select(s => new
                         {
                            RoomType = s.InnerText.CleanInnerText,
                            Rate = s.SelectSingleNode(".//parent::td/following-sibling::td[@class='room-price room-price-total'][1]")
                                    .InnerText.CleanInnerText
                         }).ToArray()
         }).ToArray();
.

Periodo di preavviso all'inizio di alcune query Xpath sopra.Ciò indica HtmlAgilityPack che la query è relativa al HtmlNode attuale.Il risultato è così:

Inserisci Descrizione dell'immagine qui

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top