Analyse des balises parent et descendantes à l'aide de HTML Agility Pack

asp.net html html-agility-pack

Question

J'essaie d'analyser le formulaire HTML avec HTML Agility Pack. Cela fonctionne bien pour le code suivant: <p>Some Text</p> Mais supposons que j'ai ceci: <p>Some Text in p Tag<span>Some text in span tag.</span> Again some text in p tag</p>

J'utilise HtmlNode nodeItem in htmlDoc.DocumentNode.Descendants(controlName).ToArray() pour obtenir toutes les valeurs d'un contrôle (dans notre cas p et span). Mais il ne s'agit que d'obtenir du texte en plusieurs fois.

Comment puis-je obtenir des valeurs de la page - "p" ainsi que "span".

UPDATE: J'essaie de développer une application multilingue où les fichiers de ressources et les clés sont générés par le code. Dans l'exemple ci-dessus: J'ai besoin de créer 3 clés: 1- "Du texte dans une balise p", 2- "Du texte dans une balise span." et 3- "Encore du texte dans la balise p." Comment puis-je créer ces clés. Le scénario actuel est le suivant: il crée une clé pour la balise span et non pour la balise p.

Merci d'avance

Réponse populaire

En réalité, la question n'est pas très claire. Vous devriez avoir publié des codes plus pertinents indiquant comment vous avez essayé d'obtenir la valeur de <p> et <span> .

Celui-ci a très bien fonctionné pour obtenir du texte à la fois dans <p> et <span> :

var html = @"<p>Some Text in p Tag<span>Some text in span tag.</span> Again some text in p tag</p>";
var htmlDoc = new HtmlDocument();
htmlDoc.LoadHtml(html);
foreach (HtmlNode nodeItem in htmlDoc.DocumentNode.Descendants("p").ToArray())
{
    Console.WriteLine(nodeItem.InnerText);
}
foreach (HtmlNode nodeItem in htmlDoc.DocumentNode.Descendants("span").ToArray())
{
    Console.WriteLine(nodeItem.InnerText);
}

Le même résultat produit par cette boucle unique foreach :

foreach (HtmlNode nodeItem in 
                htmlDoc.DocumentNode
                       .SelectNodes("//*[name() = 'p' or name() = 'span']"))
{
    Console.WriteLine(nodeItem.InnerText);
}

Ou si vous ne vous souciez pas du nom de la balise, vous pouvez obtenir tous les éléments comme suit:

foreach (HtmlNode nodeItem in 
                htmlDoc.DocumentNode
                       .SelectNodes("//*"))
{
    Console.WriteLine(nodeItem.InnerText);
}

Si aucun des exemples ci-dessus ne vous convient, mettez à jour la question pour préciser le problème que vous tentez de résoudre.



Related

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