Análisis XHTML con HTMLAgilityPack

c# html-agility-pack

Pregunta

Tengo una lista de los siguientes elementos dentro de un elemento que he encontrado usando HTMLAgilityPack.

<option value="67"><span style="color: #cc0000;">Horde</span> Leveling / Dailies & Event Guide ($50.00)</option>

Lo que tengo que hacer es analizar todo el texto de la etiqueta, sin todo el mumbo jumbo allí. He probado (¡aparentemente!) Todo, pero siempre sale así:

Horda
Guía de nivelación / diarios y eventos ($ 50.00)

y algunas veces como

Horda
Arrasamiento
/ Dailies & Guía de Eventos ($ 50.00)

Y un par de otras variaciones como esa. Incluso he ido tan lejos como para imprimir cada carácter de la cadena como un byte, y no he encontrado linebreaks o feeds, solo lo que esperaba, letras y espacios normales. Aquí está la fuente completa del html para referencia, copiado directamente de la página.

<option value="13"><span style="color: #0000ff;">Alliance</span> Leveling Guide ($30.00)</option>


<option value="12"><span style="color: #cc0000;">Horde</span> Leveling Guide ($30.00)</option>

<option value="46"><span style="color: #cc0000;">Horde</span> Dailies & Events Guide ($25.00)</option>

<option value="67"><span style="color: #cc0000;">Horde</span> Leveling / Dailies & Event Guide ($50.00)</option>


<option value="11"><span style="color: #0000ff;">Alliance</span> &amp; <span style="color: #cc0000;">Horde</span> Leveling Guide ($50.00)</option>

<option value="97"><span style="color: #0000ff;">Alliance</span> Achievements & Professions Guide ($20.00)</option>

<option value="98"><span style="color: #cc0000;">Horde</span> Achievements & Professions Guide ($20.00)</option>


<option value="99"><span style="color: #0000ff;">Alliance</span> &amp; <span style="color: #cc0000;">Horde</span> Achievements & Professions Guide ($30.00)</option>

Respuesta popular

De forma predeterminada, la etiqueta <OPTION> es tratada por Html Agility Pack como un "Vacío", lo que significa que no necesita un cierre </OPTION> , por eso en este caso, no es fácil atraparlo con XPATH. Puedes cambiar esto usando la colección HtmlNode.ElementFlags.

Aquí hay un código que debe hacer lo que quieras:

HtmlDocument doc = new HtmlDocument();
HtmlNode.ElementsFlags.Remove("option");
doc.LoadHtml(yourHtml);
foreach (HtmlNode node in doc.DocumentNode.SelectNodes("//option"))
{
    Console.WriteLine(node.InnerText);
}



Licencia bajo: CC-BY-SA with attribution
No afiliado con Stack Overflow
¿Es esto KB legal? Sí, aprende por qué
Licencia bajo: CC-BY-SA with attribution
No afiliado con Stack Overflow
¿Es esto KB legal? Sí, aprende por qué