Analisi dei tag padre e discendenti utilizzando HTML Agility Pack

asp.net html html-agility-pack

Domanda

Sto cercando di analizzare il modulo HTML con HTML Agility Pack. Funziona bene per il seguente codice: <p>Some Text</p> Ma supponiamo di avere questo: <p>Some Text in p Tag<span>Some text in span tag.</span> Again some text in p tag</p>

Sto usando HtmlNode nodeItem in htmlDoc.DocumentNode.Descendants(controlName).ToArray() per ottenere tutti i valori di un controllo (nel nostro caso p e span). Ma questo è solo ottenere il testo che è in span.

Come posso ottenere valori sia di tage - "p" che di "span".

AGGIORNAMENTO: Sto cercando di sviluppare un'applicazione multilingue in cui i file di risorse e le chiavi sono generati attraverso il codice. Nell'esempio sopra: Devo creare 3 tasti: 1- "Some Text in p Tag", 2- "Some text in span tag." e 3- "Ancora un po 'di testo nel tag p." Come posso creare queste chiavi. Lo scenario attuale è che sta creando la chiave per il tag span e non per il tag p.

Grazie in anticipo

Risposta popolare

In realtà la domanda non è molto chiara. Dovresti aver pubblicato più codici rilevanti che mostrano come hai cercato di ottenere il valore di <p> e <span> .

Questo ha funzionato bene per ottenere il testo sia in <p> che in <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);
}

Lo stesso output prodotto da questo ciclo foreach singolo:

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

O se in realtà non ti interessa il nome del tag, puoi ottenere tutti gli elementi come segue:

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

Se nessuno dei suddetti esempi è utile per il tuo caso, ti preghiamo di aggiornare la domanda per chiarire ulteriormente il problema reale che stai cercando di risolvere.




Autorizzato sotto: CC-BY-SA with attribution
Non affiliato con Stack Overflow
È legale questo KB? Sì, impara il perché
Autorizzato sotto: CC-BY-SA with attribution
Non affiliato con Stack Overflow
È legale questo KB? Sì, impara il perché