Peut-on utiliser un caractère générique ou une chaîne "contient" dans un {case} switch? attention: verbeuse

c# html-agility-pack html-parsing screen-scraping

Question

Étant novice en programmation, j'ai lu beaucoup d'exemples de code et j'ai essayé de pirater des éléments pour tenter de comprendre ce qui fonctionne. Je travaille avec le pack d'agilité HTML en essayant de supprimer une page Web d'actualités.

Problème: L’un des nœuds que je teste n’utilise pas de valeur statique, il utilise le temps d’affichage. Comment puis-je appliquer cela à une méthode switch {case}. Je suis également ouvert à toute suggestion si je suis loin de la base dans toute cette approche.

Remarque également: je n'ai pas besoin de capturer ce nœud, s'il existe un moyen de le ignorer qui fonctionne pour moi.

J'ai décidé d'utiliser un exemple qui utilise un commutateur,

var rows = doc.DocumentNode.SelectNodes(".//*[@id='weekdays']/tr");
            foreach (var row in rows)
            {
                var cells = row.SelectNodes("./td");
                string title = cells[0].InnerText;
                var valueRow = cells[2];
                switch (title)
                {
                    case "Date":
                        HtmlNode date = valueRow.SelectSingleNode("//*[starts-with(@id, 'detail_row_seek')]/td");
                        Console.WriteLine("UPC=A:\t" + date.InnerText);
                        break;

                    case "":
                        string Time = valueRow.InnerText;
                        Console.WriteLine("Time:\t" + Time);
                        break;


                    case "News":
                        string Time = valueRow.InnerText;
                        Console.WriteLine("News:\t" + News);
                        break;
                }

extrait de html

var rows = doc.DocumentNode.SelectNodes(".//*[@id='weekdays']/tr");
            foreach (var row in rows)
            {
                var cells = row.SelectNodes("./td");
                string title = cells[0].InnerText;
                var valueRow = cells[2];
                switch (title)
                {
                    case "Date":
                        HtmlNode date = valueRow.SelectSingleNode("//*[starts-with(@id, 'detail_row_seek')]/td");
                        Console.WriteLine("UPC=A:\t" + date.InnerText);
                        break;

                    case "":
                        string Time = valueRow.InnerText;
                        Console.WriteLine("Time:\t" + Time);
                        break;


                    case "News":
                        string Time = valueRow.InnerText;
                        Console.WriteLine("News:\t" + News);
                        break;
                }

.........

var rows = doc.DocumentNode.SelectNodes(".//*[@id='weekdays']/tr");
            foreach (var row in rows)
            {
                var cells = row.SelectNodes("./td");
                string title = cells[0].InnerText;
                var valueRow = cells[2];
                switch (title)
                {
                    case "Date":
                        HtmlNode date = valueRow.SelectSingleNode("//*[starts-with(@id, 'detail_row_seek')]/td");
                        Console.WriteLine("UPC=A:\t" + date.InnerText);
                        break;

                    case "":
                        string Time = valueRow.InnerText;
                        Console.WriteLine("Time:\t" + Time);
                        break;


                    case "News":
                        string Time = valueRow.InnerText;
                        Console.WriteLine("News:\t" + News);
                        break;
                }

Le problème est le suivant: la colonne temporelle n'est pas statique, elle utilise une valeur temporelle. Existe-t-il un moyen d'utiliser un caractère générique dans le cas ou un moyen de "contenir" pour contourner ce problème très complexe?

Réponse acceptée

Vous devez utiliser des valeurs constantes dans chaque cas de l'instruction switch.

La seule façon pour vous de faire ce que vous cherchez est d'utiliser le cas default: case - Dans ce cas par défaut, vous pouvez tester la valeur que vous recherchez en utilisant un test contains , Parse ou Regex avec if .

Je ne pouvais pas vraiment suivre votre exemple de code HTML (désolé!) - mais le C # modifié pourrait ressembler à quelque chose comme:

            switch (title)
            {
                case "Date":
                    HtmlNode date = valueRow.SelectSingleNode("//*[starts-with(@id, 'detail_row_seek')]/td");
                    Console.WriteLine("UPC=A:\t" + date.InnerText);
                    break;


                case "News":
                    string News = valueRow.InnerText;
                    Console.WriteLine("News:\t" + News);
                    break;

                default:
                    if (regexTime.Match(title))
                    {
                        string Time = valueRow.InnerText;
                        Console.WriteLine("Time:\t" + Time);
                    }
                    break;
            }

Réponse populaire

Vous pouvez utiliser le "cas par défaut:" et mettre une condition à l'intérieur qui vérifierait.

 switch (title) {
                    case "Date":
                        HtmlNode date = valueRow.SelectSingleNode("//*[starts-with(@id, 'detail_row_seek')]/td");
                        Console.WriteLine("UPC=A:\t" + date.InnerText);
                        break;

                    case "News":
                        string Time = valueRow.InnerText;
                        Console.WriteLine("News:\t" + News);
                        break;

                    case default:
                        if (whatever you need) {
                            ...
                        }
                        break;
                }



Sous licence: CC-BY-SA with attribution
Non affilié à Stack Overflow
Est-ce KB légal? Oui, apprenez pourquoi
Sous licence: CC-BY-SA with attribution
Non affilié à Stack Overflow
Est-ce KB légal? Oui, apprenez pourquoi