2010-12-03 28 views
2

En utilisant le pack d'agilité html; Comment extraire un "fragment" html d'un document html complet? Pour mes besoins, un "fragment" html est défini comme tout le contenu à l'intérieur des balises <body>.Html Agility Pack - Récupère le fragment html d'un document html

Par exemple:

Exemple d'entrée:

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

sortie souhaitée:

<p>My content</p> 

Idéalement, je voudrais revenir le contenu non modifié si ne contient pas de <html> ou <body> élément (p ex. supposons que l'on m'a passé un fragment en premier lieu s'il ne s'agissait pas d'un document html complet)

Quelqu'un peut-il me diriger dans la bonne direction?

Répondre

6

Je pense que vous devez le faire en morceaux.

vous pouvez le faire selectNodes de documents pour le corps ou html comme suit

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

alors vous pouvez vérifier les valeurs NULL des critères et si cela est prévu, vous pouvez prendre la chaîne comme il est.

Hope it helps :)

+0

Doh ... pensé qu'il était peut-être aussi simple que cela; Merci! – DanP

4

cela devrait fonctionner:

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