Analisi di agilità HTML

c# html-agility-pack linq xml

Domanda

Vorrei analizzare una tabella HTML e ridimensionare i contenuti utilizzando XML a LINQ in una casella di riepilogo associata.

Uso il pacchetto Agility HTML e utilizzo di questo codice.

    HtmlWeb web = new HtmlWeb();
    HtmlAgilityPack.HtmlDocument doc = web.Load("http://www.SourceURL");
    HtmlNode rateNode = doc.DocumentNode.SelectSingleNode("//div[@id='FlightInfo_FlightInfoUpdatePanel']");
    string rate = rateNode.InnerText;
    this.richTextBox1.Text = rate;

L'HTML sembra così ..

    HtmlWeb web = new HtmlWeb();
    HtmlAgilityPack.HtmlDocument doc = web.Load("http://www.SourceURL");
    HtmlNode rateNode = doc.DocumentNode.SelectSingleNode("//div[@id='FlightInfo_FlightInfoUpdatePanel']");
    string rate = rateNode.InnerText;
    this.richTextBox1.Text = rate;

Ma sta restituendo questo

    HtmlWeb web = new HtmlWeb();
    HtmlAgilityPack.HtmlDocument doc = web.Load("http://www.SourceURL");
    HtmlNode rateNode = doc.DocumentNode.SelectSingleNode("//div[@id='FlightInfo_FlightInfoUpdatePanel']");
    string rate = rateNode.InnerText;
    this.richTextBox1.Text = rate;

Quello che vorrei è pasrse in formato XML e poi usare LINQ in XML per analizzare il codice XML in una risorsa listbox associata.

Sto pensando che ho bisogno di usare una variazione del sotto per ogni classe, ma vorrei un aiuto.

    HtmlWeb web = new HtmlWeb();
    HtmlAgilityPack.HtmlDocument doc = web.Load("http://www.SourceURL");
    HtmlNode rateNode = doc.DocumentNode.SelectSingleNode("//div[@id='FlightInfo_FlightInfoUpdatePanel']");
    string rate = rateNode.InnerText;
    this.richTextBox1.Text = rate;

Risposta accettata

Stai usando InnerText che rimuove l'HTML.

Usa InnerHtml :

string rate = rateNode.InnerHtml;

È possibile creare un documento XML da questa stringa (assumendo che sia un XML valido).

Puoi anche interrogare il rateNode nello stesso modo in cui lo hai recuperato, selezionando i suoi nodi figli:

string rate = rateNode.InnerHtml;

Risposta popolare

Se si desidera lavorare con linq su xml, è possibile trasformare HtmlDocument in una stringa xml:

HtmlWeb web = new HtmlWeb();
HtmlAgilityPack.HtmlDocument doc = web.Load("http://www.SourceURL");  
doc.OptionOutputAsXml = true;
System.IO.StringWriter sw = new System.IO.StringWriter();
System.Xml.XmlTextWriter xw = new System.Xml.XmlTextWriter(sw);
doc.Save(xw);
string result = sw.ToString();

Quindi è sufficiente creare un oggetto XDocument e caricare con la stringa xml:

HtmlWeb web = new HtmlWeb();
HtmlAgilityPack.HtmlDocument doc = web.Load("http://www.SourceURL");  
doc.OptionOutputAsXml = true;
System.IO.StringWriter sw = new System.IO.StringWriter();
System.Xml.XmlTextWriter xw = new System.Xml.XmlTextWriter(sw);
doc.Save(xw);
string result = sw.ToString();

E ora hai un XDocument per giocare con Linq.




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é