Avatar billede egeriis Nybegynder
20. marts 2007 - 13:12 Der er 12 kommentarer og
1 løsning

Hive data ud af webside vhja. mønster

Hej kære eksperter,

Jeg sidder lidt på idestadiet og skal lave et script. Jeg er så kommet til den del, at gennemtænke hvilke muligheder der er for at hive bestemte data ud af en webside, udfra et bestemt mønster.

Lad mig præsentere et eksempel:


[code]

<lå li="123">

<table>
<tr><td>Kram din fætter</td>
<td>Vi vi gerne have at du krammer din fætter</td></tr>

<tr><td>Stik hovedet frem</td>
<td>Så går vi snart på gaden, stik hovedet frem og kig nærmere</td></tr>

</table>

</lå>

[/code]

Her vil jeg så fodre PHP med dette mønster:

[pattern]
<tr><td>[headline]</td>
<td>[text]</td></tr>
[/pattern]

Så skal den finde alle forekomster af dette mønster, hive de to variabler ud, jeg har defineret ([headline], [text]) og give fx følgende resultat:

Array(
  Array('headline' => 'Kram din fætter', 'text' => 'Vi vi gerne have at du krammer din fætter'),
  Array('headline' => 'Stik hovedet frem', 'text' => 'Så går vi snart på gaden, stik hovedet frem og kig nærmere')
);


Anybody got some ideas, how to set this in action? :)


På forhånd tak :]
Avatar billede jakobdo Ekspert
21. marts 2007 - 17:56 #1
Jeg forstår ikke helt dit spørgsmål?
Din [code] ... [/code] er det som det nu er?
Og så vil du med noget kode, ende op med:
Array(
  Array('headline' => 'Kram din fætter', 'text' => 'Vi vi gerne have at du krammer din fætter'),
  Array('headline' => 'Stik hovedet frem', 'text' => 'Så går vi snart på gaden, stik hovedet frem og kig nærmere')
);

?
Avatar billede egeriis Nybegynder
21. marts 2007 - 19:08 #2
Ja, men det skal gerne være sådan at hvis jeg nu har to forskellige websites, hvor emnerne er opstillet på to vidt forskellige måder, skal det være nemt at lave et pattern, hvor man kan fortælle hvor overskrift, beskrivelse, osv. står.
Avatar billede jakobdo Ekspert
21. marts 2007 - 22:11 #3
Det tror jeg ikke som sådan man bare kan lave.
Hvis du skal hente noget fra en side, så skal du evt. have fat i noget regexp.
Men igen, hvis det på den ene side står som: <h1>NOGET VIGTIGT</h1> eller <b>Noget Vigtigt</b> eller <strong>Noget andet</strong>

Så kan du ikke med en kode klare det.
Avatar billede egeriis Nybegynder
24. marts 2007 - 22:33 #4
Jo hvis jeg laver et mønster at gå ud fra?

I dine eksempler:

<h1>[text]</h1>
<b>[text]</b>
<strong>[text]</strong>
Avatar billede egeriis Nybegynder
24. marts 2007 - 22:34 #5
Det behøver ikke engang være sådan at man skal definere hvor variablerne skkal hentes fra. Men derimod bare at man med regexp. henter dem ud.

Jeg har hele tiden tænkt i Reg.Exp. men jeg er ikke satans god i det.
Avatar billede jakobdo Ekspert
25. marts 2007 - 10:25 #6
Du kunne jo lave en funktion i stil med:

function return textFromTag($tag,$text)
{
    $retVal = false;
    $quotedTag = preg_quote($tag);
   
    if(preg_match('%<'.$quotedTag.'>(.+?)</'.$quotedTag.'>%si', $text, $match))
    {
        $retVal = $match[1];
    }
    return $retVal;
}
Avatar billede egeriis Nybegynder
26. marts 2007 - 09:14 #7
Det fungerer jo, som jeg havde lyst til - med en mindre modifikation.

Men! Hvorfor finder den kun det ene match?


$code = '<div li="123">

<table>

<tr><td class="hl">Overskrift 1</td>
<td class="txt">Text 1</td></tr>

<tr><td class="hl">Overskrift 2</td>
<td class="txt">Text 2</td></tr>

</table>

</div>';

function textFromTag($starttag,$endtag,$text)
{
    $retVal = false;
    $quotedSTag = preg_quote($starttag);
    $quotedETag = preg_quote($endtag);

    preg_match('%<'.$quotedSTag.'>(.+?)</'.$quotedETag.'>%si', $text, $match);
    /*{
        $retVal = $match[1];
    }*/
    return $match;
}

var_dump(textFromTag('td class="hl"', 'td', $code));
Avatar billede jakobdo Ekspert
26. marts 2007 - 09:22 #8
Fordi den kun er lavet til at matche en.
Man kan godt lave det som preg_match_all() så fanger denne alle sammen.
Det skal jeg evt. ligge på senere.
Avatar billede egeriis Nybegynder
26. marts 2007 - 09:26 #9
Arh, nu fandt jeg da ud af det, hehe.. Hvad hvis jeg skal finde et link, skal jeg så ikke bruge en eller anden fiks reg.exp. sætning?
Avatar billede jakobdo Ekspert
26. marts 2007 - 16:30 #10
Så skal du have fat i en lidt anderledes regexp jo.
Måske du skulle tage et kig på www.regexbuddy.com eller www.regular-expressions.info
Avatar billede egeriis Nybegynder
23. april 2007 - 13:47 #11
Hej Jakob, undskyld ventetiden, havde glemt jeg havde et åbvent spørgsmål. Den løsningsmodel du forelagde mig fungerer mere eller mindre succesfuldt, så jeg vil gerne uddele pointene til dig.
Avatar billede jakobdo Ekspert
23. april 2007 - 14:58 #12
Svar!
Avatar billede jakobdo Ekspert
26. april 2007 - 21:13 #13
takker for point.
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
Vi tilbyder markedets bedste kurser inden for webudvikling

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