Html Agility Pack - Ottieni il frammento html da un documento html

c# html html-agility-pack

Domanda

Utilizzando il pacchetto di agilità html; come posso estrarre un "frammento" html da un documento html completo? Per i miei scopi, un "frammento" html è definito come tutto il contenuto all'interno dei tag <body> .

Per esempio:

Esempio di input:

<html>
   <head>
     <title>blah</title>
   </head>
   <body>
    <p>My content</p>
   </body>
</html>

Uscita desiderata:

<html>
   <head>
     <title>blah</title>
   </head>
   <body>
    <p>My content</p>
   </body>
</html>

Idealmente, mi piacerebbe restituire inalterato il contenuto se non contenesse un elemento <html> o <body> (ad esempio, supponiamo che mi sia passato un frammento in primo luogo se non fosse un documento html completo)

Qualcuno può indicarmi la giusta direzione?

Risposta accettata

Penso che tu debba farlo a pezzi.

puoi fare selectnodes di documento per body o html come segue

doc.DocumentNode.SelectSingleNode("//body") // returns body with entire contents :)

quindi è possibile verificare i valori nulli per i criteri e, se viene fornito, è possibile prendere la stringa così com'è.

Spero che sia d'aiuto :)


Risposta popolare

Quanto segue funzionerà:

public string GetFragment(HtmlDocument document)
{
   return doc.DocumentNode.SelectSingleNode("//body") == null ? doc.DocumentNode.InnerHtml : doc.DocumentNode.SelectSingleNode("//body").InnerHtml;
}



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é