Question

Groupe de données en C#, j'ai analysé le fichier html et d'obtenir toutes les données sur elle, maintenant, je veux les regrouper comme suit:

enter image description here

Les lignes qui sont sélectionnés sont le parent et contenir les éléments suivants de l'enfant, le code sur lequel je travaille est ici:

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();

le RoomType contient les données qui sont analysées par le HTML AgilityPack, comment puis-je groupe par le Nom, comme le salaire et les Enregistrer , la Meilleure Chambre Disponible Seulement ...

Fichier HTML est ici : http://notepad.cc/share/g0zh0TcyaG

Merci

Était-ce utile?

La solution

Au lieu de faire de l'union de 3 requêtes XPath, puis d'essayer de les regrouper en arrière par le Taux de "Description" (aka par élément : <td class="rate-description">), vous pouvez le faire d'une autre manière autour.

Vous pouvez baser votre LINQ sélection par le Taux de "Description", puis dans la projection de la partie, obtenir tous les types de chambres et les tarifs des chambres en vertu de l'actuel Taux de "Description" aide par rapport 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();

Période de préavis au début de certaines requêtes XPath ci-dessus.Qui dit HtmlAgilityPack que la requête est par rapport à l'actuel HtmlNode.Le résultat est à peu près comme ceci :

enter image description here

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top