HTMLAgilityPack e separazione su <br/>

html-agility-pack

Domanda

Ho un po 'di html, che è separato da <br/> ad es .:

Jack Janson
<br/>
309 123 456
<br/>
My Special Street 43

Qual è il modo più semplice per recuperare le informazioni in 3 colonne?

Non sono un esperto di XPath, quindi un altro approccio sarebbe quello di separare la stringa nell'interruzione di riga e lavorare solo con l'array. C'è un modo più intelligente per farlo?

Aggiornamento: dimenticato per formattare il codice.

Risposta accettata

In puro XPATH su XML, dovresti usare un'espressione XPATH come questa: //preceding-sibling::br o //following-sibling::br (vedi qui per aiuto su XPATH Axes )

Ma l'implementazione di XPATH su HTML che troverai in Html Agility Pack non supporta il nodo di puro testo o (nodo Attribute) nelle espressioni di selezione XPATH ( //br/text() o //br/@blah non funzionano per esempio). Nota che funziona nei filtri, quindi, questi //br[text()='blah'] o //br[@att='blah'] funzionano.

Quindi, tornando alla domanda, è necessario combinare XPATH e codice, qualcosa del genere:

HtmlDocument doc = new HtmlDocument();
doc.Load(myHtmlFile);

foreach (HtmlNode p in doc.DocumentNode.SelectNodes("//br"))
{
    Console.WriteLine(p.PreviousSibling.InnerText.Trim());
}

Questo uscirà

HtmlDocument doc = new HtmlDocument();
doc.Load(myHtmlFile);

foreach (HtmlNode p in doc.DocumentNode.SelectNodes("//br"))
{
    Console.WriteLine(p.PreviousSibling.InnerText.Trim());
}



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é