analyseur d'agilité HTML lu à partir d'un tampon / flux

asp.net c# html html-agility-pack httpmodule

Question

J'essaie de modifier une page HTML avant qu'elle ne s'affiche dans un navigateur à l'aide d'un module HTTP. J'ai essayé d'implémenter l'analyseur HTML d'agility, mais il ne semble que lire à partir de fichiers.

Comment puis-je le faire lire à partir d'un tampon / flux?

public override void Write(byte[] buffer, int offset, int count)
    {
      byte[] data = new byte[count];
      Buffer.BlockCopy(buffer, offset, data, 0, count);
      string html = System.Text.Encoding.Default.GetString(buffer);

      HtmlDocument doc = new HtmlDocument();
      doc.Load(html);
      foreach(HtmlNode link in doc.DocumentElement.SelectNodes("//a[@href"])
      {
      HtmlAttribute att = link["href"];
      att.Value = FixLink(att);
      }
    }

Réponse acceptée

Vous devriez pouvoir utiliser un MemoryStream pour lire les données:

public override void Write(byte[] buffer, int offset, int count)
{
  var stream = new MemoryStream(buffer, offset, count);

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

  foreach(HtmlNode link in doc.DocumentElement.SelectNodes("//a[@href"])
  {
    HtmlAttribute att = link["href"];
    att.Value = FixLink(att);
  }
}

Réponse populaire

En réalité, la méthode HtmlDocument.Load () est surchargée et contient les définitions permettant de charger des flux: Load (Stream), Load (Stream, Boolean), Load (Stream, Encoding).

Vous trouverez la documentation dans l'onglet Téléchargements à l' adresse http://htmlagilitypack.codeplex.com/.



Sous licence: CC-BY-SA with attribution
Non affilié à Stack Overflow
Est-ce KB légal? Oui, apprenez pourquoi
Sous licence: CC-BY-SA with attribution
Non affilié à Stack Overflow
Est-ce KB légal? Oui, apprenez pourquoi