Avatar billede tommer Nybegynder
11. november 2008 - 14:11 Der er 11 kommentarer og
1 løsning

finde alle hyperlinks i html

Hey,

Jeg skal finde alle 'title' på hyperlinks i en html streng og rette noget i den tilhørende href på dem.

Er der nogle ideer til hvordan?
Avatar billede jokkejensen Novice
11. november 2008 - 15:03 #1
Hvis html'en er valid, kunne du let køre den igennem som et xml document med xslt

//a[@title != '']

Ellers brug regular expressions (her er jeg ikke så stærk).

/J
Avatar billede arne_v Ekspert
12. november 2008 - 03:15 #2
valid HTML != valid XML
Avatar billede arne_v Ekspert
12. november 2008 - 03:29 #3
Enten skal du have fat i en HTML parser. Eller så regex.
Avatar billede arne_v Ekspert
12. november 2008 - 03:29 #4
Lidt regex kode:

using System;
using System.Text.RegularExpressions;

namespace E
{
    public class Program
    {
        private static Regex re = new Regex(@"(?:<a[^>]+href\s*=\s*[""'])([^""']*)(?:[""'][^>]*>)([^<]*)(?:</a>)", RegexOptions.IgnoreCase);
        public static void Find(string html)
        {
            foreach(Match m in re.Matches(html))
            {
                Console.WriteLine("link=" + m.Groups[1].Value);
                Console.WriteLine("title=" + m.Groups[2].Value);
            }
        }
        public static void Main(string[] args)
        {
            Find("bla <a href='foo.html'>Foo</a> bla <a href='bar.html'>Bar</a> bla");
            Console.ReadKey();
        }
    }
}
Avatar billede tommer Nybegynder
12. november 2008 - 09:01 #5
Hej gutter, tak for input jeg kigger lige på det asap ;-)
Avatar billede tommer Nybegynder
19. november 2008 - 00:22 #6
Hey
Nå, jeg har kigget på det og arne_v's udgave spiller faktisk fint.
Men m.Groups[2].Value er selve linkets tekst og ikke title, nogen ideer til hvordan det fikses?
Avatar billede arne_v Ekspert
19. november 2008 - 02:36 #7
Hvad mener du med title ?

Jeg er ikke klar at a tag har en title attribut.

Men hvis den har så kan den sagten fiskes ud med regex også.
Avatar billede tommer Nybegynder
19. november 2008 - 08:44 #8
ja det er attributten title....
Avatar billede arne_v Ekspert
20. november 2008 - 04:28 #9
using System;
using System.Text.RegularExpressions;

namespace E
{
    public class Program
    {
        private static Regex re = new Regex(@"(?:<a[^>]+href\s*=\s*[""'])([^""']*)(?:[""'][^>]+title\s*=\s*[""'])([^""']*)(?:[""'][^>]*>)([^<]*)(?:</a>)", RegexOptions.IgnoreCase);
        public static void Find(string html)
        {
            foreach(Match m in re.Matches(html))
            {
                Console.WriteLine("link=" + m.Groups[1].Value);
                Console.WriteLine("title=" + m.Groups[2].Value);
                Console.WriteLine("text=" + m.Groups[3].Value);
            }
        }
        public static void Main(string[] args)
        {
            Find("bla <a href='foo.html' title='foofoo'>Foo</a> bla <a href='bar.html' title='barbar'>Bar</a> bla");
            Console.ReadKey();
        }
    }
}
Avatar billede tommer Nybegynder
20. november 2008 - 08:55 #10
Der er ikke et øje tørt...
Send svar arne ;-)
Avatar billede arne_v Ekspert
20. november 2008 - 15:06 #11
svar
Avatar billede tommer Nybegynder
20. november 2008 - 22:50 #12
;-)
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
IT-kurser om Microsoft 365, sikkerhed, personlig vækst, udvikling, digital markedsføring, grafisk design, SAP og forretningsanalyse.

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester