Avatar billede trine_h Nybegynder
23. februar 2005 - 18:26 Der er 13 kommentarer

søgning i html

Hej jeg vil gerne lave en søgefunktion som kun finder det søgte i en html fil hvis alle søgekriterier er med. eks. følgende streng:
table.table.img

der skal den kun returnere det image som er placeret - allerførst i en table og dernæst i en nested table. Er der tidligere på siden eks. en struktur med: table.table.a skal denne springes over. Jeg har bare brug for kode i grove træk - det vigtige er at den ikke søger på table.table.a men hopper videre til table.table.img - Hvad vil den mest optimale søgefunktion være...
Avatar billede arne_v Ekspert
23. februar 2005 - 18:45 #1
Umiddelbart mener jeg at der er 3 muligheder:

1)  håndkodet løsning med bruge af IndexOf til at finde delene

2)  løsning med regular expression

3)  hvis det er validt XHTML så brug en løsning med XML parser
Avatar billede burningice Nybegynder
23. februar 2005 - 18:51 #2
vil umiddelbart tro at det bedste ville være at lave et DOM af siden og lave søgningen i den.

Efter lidt søgning på nettet viser det sig dog at det er svært at finde nogle DOM Inspectors som kan bruges i sin egen kode, de er alle færdige programmer :S

http://www.google.dk/search?hl=da&client=firefox-a&rls=org.mozilla%3Aen-US%3Aofficial&q=DOM+inspector&btnG=S%C3%B8g&meta=
Avatar billede trine_h Nybegynder
24. februar 2005 - 09:36 #3
html koden er placeret i et dom...
Avatar billede trine_h Nybegynder
24. februar 2005 - 09:38 #4
så spørgsmålet er - hvordan søger jeg effektivt i et dom tree. nodes har x antal childs og er knyttet til 1 parent.
Avatar billede trine_h Nybegynder
25. februar 2005 - 08:52 #5
public void FollowNode(HtmlNode node)
        {
            ProcessNode(node);
                if (node is HtmlElement)
                {
                    HtmlElement tempHN = (HtmlElement) node;
                    if (tempHN.Nodes != null)
                    {
                        HtmlNodeCollection children = tempHN.Nodes;
                        foreach (HtmlNode child in children)
                        {
                            if (child is HtmlElement)
                            {
                                FollowNode(child);
                            }
                        }
                   
                    }
                }
           
        }
        public void ProcessNode(HtmlNode node)
        {}

Jeg har fået lavet ovenstående - en depth first search - spørgsmålet er nu hvordan jeg får søgt på eks. følgende ".*.table.table.img". Stjernen er ment som relativ søgning - dvs. søg i strukturen indtil der findes en tabel som har "tabel" som child og "img" som child
Avatar billede segato Nybegynder
25. februar 2005 - 15:02 #6
Det er ikke en god måde at søge på.

Brug XPath. På en dom findes der typisk en funktion der hedder SelectNodes eller lign. Den tager en xpath som returnere de node du er ude efter. f.eks.

/html/*td  vil retunere alle td. XPath er ret stærkt mange muligheder vil råde dig til at læse lidt om dem på nettet da hurtigt kan blive din ven. Har selv arbejdet 1.5 år med extracting af html. Og det bedste er en kombination af Regex og XPath.
Avatar billede trine_h Nybegynder
25. februar 2005 - 15:17 #7
tak for et svar - XPath kender jeg ikke men lyder interessant - eneste problem er at det dom jeg bruger ikke har en "selectnodes" - har kildekoden til dom'et - kan jeg evt. selv implementere xpath? hvad er det præcist?
Avatar billede trine_h Nybegynder
25. februar 2005 - 15:20 #8
".*.table.table.img" - vil jeg kunne finde ovenstående struktur vha. regex?
Avatar billede segato Nybegynder
25. februar 2005 - 18:01 #9
hvor får du din DOM fra? Er det fra java ?
Avatar billede arne_v Ekspert
25. februar 2005 - 19:45 #10
Kan du give et link til hvad det er for noget DOM kode du bruger ?

Så kan vi muligvis komme med en god ide.

XPath er XML, så den kan vel kun bruges til valid XHTML.
Avatar billede segato Nybegynder
25. februar 2005 - 20:35 #11
Hun siger hun har en DOM så vi må vel gå ud fra det er wellformed. Og de fleste DOM har en eller anden form for XPath indbygget. Men kunne være godt lige at se lid tkode.
Avatar billede trine_h Nybegynder
25. februar 2005 - 20:43 #12
http://www.codeproject.com/dotnet/apmilhtml.asp

Det er så nok ikke et DOM - men html'en placeres i en tree struktur. Er det eneste af den slags jeg har kunnet finde med kilde kode til og skrevet i c#
Avatar billede segato Nybegynder
25. februar 2005 - 21:00 #13
Har lige siddet og leget lidt med hans kode og kan se den returnere en XHTML som du kan proppe i et XmlDocument og derfra bruge XPath. Inden du lader dig skræmme skal jeg lige sige XPath er ret simpelt of ret lige til. Men skal lige sige han HTML parser desværre langt fra virker på alt html. Det er der faktisk ikke mange parseere der gør. Hvorfor bruger du ikke MSHTML som har en indbygget dom. Det er den IE bygger på.
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