2008-12-12 4 views
0

J'essaie de déterminer la surcharge de l'auto-nommage ASP.NET des contrôles serveur. J'ai une page qui contient 7.000 lignes de HTML rendues à partir de centaines de contrôles ASP.NET imbriqués, dont beaucoup ont des attributs id/name qui ont des centaines de caractères. Ce que j'aimerais idéalement, c'est quelque chose qui extrairait chaque liste d'attributs HTML commençant par "ctl00". La fonction regex Find dans Notepad ++ serait parfaite, si seulement je savais ce que l'expression régulière devrait être?Comment extraire des valeurs d'attribut d'ID d'élément à partir du code HTML

À titre d'exemple, si le HTML est:
< input name = "ctl00 $ Header $ Recherche $ Mots-clés" type = "text" maxlength = "50" class = "recherche"/>

I souhaite que la sortie soit quelque chose comme:
name = "ctl00 $ Header $ Recherche $ Mots-clés"
Une recherche plus avancée pourrait inclure le nom de l'élément ainsi (par exemple le type de commande):
entrée | name = "ctl00 $ Header $ Rechercher $ Mots-clés "

Afin de faire face aux attributs Id et Name Je vais simplement réexécuter la recherche en recherchant Id au lieu de Name (c.-à-d. Je n'ai pas besoin de quelque chose qui va chercher les deux en même temps).

La sortie finale sera un rapport Excel qui répertorie le nombre de contrôles serveur sur la page et la longueur du nom de chacun, éventuellement triés par type de contrôle.

Répondre

0

répondre à ma propre question, la meilleure façon de le faire est d'utiliser BeautifulSoup, l'analyseur Python « HTML sale » dont le slogan est:

« Vous ne l'avez pas écrit cette page terrible. Vous essayez simplement d'obtenir des données. En ce moment, vous ne vous souciez pas vraiment de ce que le HTML est censé ressembler. Ni le fait cet analyseur «

Il fonctionne, et il est disponible ici - http://crummy.com/software/BeautifulSoup

1

rapide et sale:

Rechercher

\w+\s*=\s*"ctl00[^"]*" 

Cela correspondra tout texte qui ressemble à un attribut, par exemple name="ctl00test" ou attr = "ctl00longer text". Il ne va pas vérifier si cela se produit réellement dans une balise HTML - c'est un peu plus difficile à faire et peut-être inutile? Il ne vérifie pas non plus les guillemets échappés dans le nom du tag. Comme d'habitude avec les regex, la complexité requise dépend de ce que vous voulez exactement faire correspondre et de ce à quoi ressemble votre entrée ...

0

"7000"? "Des centaines"? Cher Dieu.

Puisque vous cherchez simplement à la source dans un éditeur de texte, essayez ceci .../(id | nom) = "ct [^"] * "/

+0

Mes pensées précisément:.. S –

+0

Ditto espace aaaaaaaaaaaaaand pour la validation –

+0

downvote ?! * soupir * – annakata

-1

Je suggère XPath, comme dans ce question

+0

XPath? Sur une page HTML? Comme il a déclaré qu'il a 7000 lignes et des centaines de contrôles, que pensez-vous que les chances sont que la page est compatible XHTML ?À propos de zéro? –

+0

vous pouvez également utiliser xpath sur html, vous pouvez définir l'analyseur de ne pas faire une validation stricte du document –

Questions connexes