Sélectionnez html spécifique avec "Html Agility Pack"

c# html-agility-pack

Question

J'utilise html-agility-pack et j'essaie de sélectionner un html spécifique. La partie que je veux obtenir est chaque numéro de GTIN dans ces blocs:

<td><span class="mobile-only">GTIN:</span>07330155011068</td>

-La partie que je veux, ce sont les chiffres après le tag span final. Ex: 07330155011068. Ci-dessous, mon HTML et ma méthode c #:

<div class="table-wrapper" style='display: block;'>
    <table id="tableSearchArticle">
        <thead>
            <tr>
                <th><a href="#">Article</a></th>
                <th><a href="#">art.nr.</a></th>
                <th><a href="#">Brand</a></th>
                <th><a href="#">GTIN</a></th>
            </tr>
        </thead>
        <tbody>
            <tr>
                <td>
                    <a href="http://www.dabas.com/ProductSheet/Detail.ashx/121308" target="_blank">
                        Dalapannkaka fryst ca100st 6kg
                    </a>
                </td>
                <td><span class="mobile-only">Tillverkarens art.nr:</span>11068</td>
                <td><span class="mobile-only">Varumärke:</span>test</td>
                <td><span class="mobile-only">GTIN:</span>07330155011068</td>
            </tr>
            <tr>
                <td>
                    <a href="http://www.dabas.com/ProductSheet/Detail.ashx/124494" target="_blank">
                        Dessertpannkaka fryst ca100st 6kg
                    </a>
                </td>
                <td><span class="mobile-only">Tillverkarens art.nr:</span>11405</td>
                <td><span class="mobile-only">Varumärke:</span>test</td>
                <td><span class="mobile-only">GTIN:</span>07330155114059</td>
            </tr>
        </tbody>
    </table>

    </div>

Et j'utilise cette méthode pour essayer d'obtenir mes valeurs. Le problème est que je ne sais pas quel code écrire dans SelectNode () pour obtenir le innerHtml contenant les numéros GTIN.

public void TestGetHtml()
    {
        var doc = new HtmlDocument();
        doc.Load("C:/Users/Desktop/test.html");
        foreach (HtmlNode link in doc.DocumentNode.SelectNodes("TODO: Add code to select all GTIN"))
        {

        }
        doc.Save("file.htm");
    }

Réponse acceptée

Utilisez Xpath pour sélectionner les quatrièmes cellules du corps de la table avec l'id tableSearchArticle . Ensuite, récupérez le texte intérieur des cellules (sans balises HTML, comme GTIN:07330155114059 ) et supprimez le préfixe GTIN:

var xpath = "//table[@id='tableSearchArticle']/tbody/tr/td[4]";
var gtins = doc.DocumentNode.SelectNodes(xpath)
               .Select(td => td.InnerText.Replace("GTIN:", ""));

Sortie:

[
  "07330155011068",
  "07330155114059"
]

Réponse populaire

SelectNodes reçoit une expression Xpath. Donc, vous pouvez commencer avec ceci (non testé):

foreach (HtmlNode tr in doc.DocumentNode.SelectNodes(
   "//div[@class='table-wrapper']/table[@id='tableSearchArticle']/tbody/tr"))
{
    Console.WriteLine(tr.InnerHtml);
    Console.WriteLine(tr.SelectSingleNode(".//a").GetAttribute("href"));
    Console.WriteLine(tr.SelectSingleNode(".//td[last()]").InnerText);
}


Related

Sous licence: CC-BY-SA with attribution
Non affilié à Stack Overflow
Sous licence: CC-BY-SA with attribution
Non affilié à Stack Overflow