2010-08-22 5 views
2

J'ai quelques centaines de fichiers HTML statiques à traiter.Traitement du document HTML avec C#

Ils contiennent des liens comme celui-ci

<a href="http://www.mysite.com/">Link</a> 

Je dois ajouter? Ref = auto à une URL qui commence par http://www.mysite.com et devient

<a href="http://www.mysite.com/?ref=self">Link</a> 

cependant, je ne sais pas si ça va être http://www.mysite.com ou http://www.mysite.com/ aussi il pourrait être lié à un sous-répertoire.

Quel est le moyen le plus efficace de le faire? en C#

+0

Pourquoi le vote baissier? – Rana

+0

Je me suis posé la même question et j'ai posé une question à votre question. – jgauffin

Répondre

1

Quel est le moyen le plus efficace de le faire? en C#

  1. Rechercher la chaîne http://www.mysite.com.
  2. S'il n'existe pas, passez à l'étape 7.
  3. Recherchez le prochain ".
  4. S'il n'existe pas, erreur.
  5. Insérez ?ref=self avant le ".
  6. Passez à l'étape 1.
  7. Retour.

Ceci peut être accompli avec la substitution d'expression régulière suivante:

s#http://www.mysite.com[^"]*#&?ref=self#g 

Une façon plus agréable (plus expressif) serait d'utiliser un analyseur HTML et XPath.

+0

Bug: L'attribut 'href' pourrait être entre guillemets simples ☺ – Timwi

+0

@Timwi, Ce n'est pas un bogue. Le PO a clairement indiqué ce que l'entrée attendue est (qui n'incluait pas '' '), et que l'efficacité était un facteur (ainsi ils disent ...). – strager

+0

Je ne vois pas où il a déclaré cela. Le PO a clairement indiqué que la contribution attendue est ** HTML **. Il n'a pas déclaré qu'il s'agissait d'un sous-ensemble spécial de HTML, et il n'a pas non plus déclaré que ses exemples étaient exhaustifs. Si je n'avais pas commenté, il n'aurait peut-être pas réalisé que l'un de ses fichiers HTML pouvait contenir des attributs href avec des guillemets simples et que votre algorithme les ignorerait silencieusement. – Timwi

1

L'analyse HTML peut être difficile car HTML contient souvent des balises et des attributs mal formés. Je suggère de regarder dans une bibliothèque d'analyse HTML existante pour faire votre travail lourd, ou, en utilisant XSLT pour transformer un (x) HTML valide à votre sortie désirée.

Cette question What is the best way to parse html in C#? a de bons liens vers les bibliothèques d'analyse HTML pour C#.

+0

Une bibliothèque d'analyse html est comme prendre un canon à une chasse au canard dans ce cas. – jgauffin

+0

@jgauffin, je ne vois pas comment. C'est définitivement une solution appropriée. – strager

+0

Parce que les URI sont assez faciles à trouver et à remplacer dans ce cas. – jgauffin

0

Vous pouvez utiliser Page.Request.UrlReferrer pour détecter l'origine de la requête.