Avatar billede mads2008 Nybegynder
28. marts 2012 - 09:57 Der er 15 kommentarer og
1 løsning

Simpelt output fra XML - 2 problemer

Hej

Som I nok vil kunne se på mit spørgsmål jeg fuldstændig lost i PHP syntax.

Koden med linienumre herunder  virker fint.

1.  $xml = simplexml_load_file("xmlfil.xml");
2.  $titles = $xml->xpath('/holdListe/hold/holddata/titel'); 
3.  $steder = $xml->xpath('/holdListe/hold/geografi/sted');
4. 
5.  foreach ($titles as $titel)  {
6.  echo "<a href='http://domænenavn.dk/index.php?type=sseek&seek=$titel' style='font-7.  size:10px;'>$titel</a>$sted<br />";
8.  }

Jeg har brug for hjælp til 2 problemer.

1.
Linie 5: hvordan får jeg flettet $steder as $sted ind  her ($titles as $titel)  - min logik siger jo bare ($titles as $titel and $steder as $sted)?

2.
Linie 6: i $titel efter /index.php?type=sseek&seek=$titel' skal:
- mølleå oversættes til m%F8lle%E5
- Hva' så oversættes til Hva%27+s%E5
- osv..

På forhånd 1000 tak!!!
Avatar billede inteeeL Nybegynder
28. marts 2012 - 11:06 #1
Til dit første problem..
En dumpudgave af henholdsvis $titles og $steder ville være super. Der er umiddelbart ikke noget galt i at have en foreach inden i en foreach, dog ville det performancemæssigt være bedre at samle/kombinere $titles og $steder til et samlet array.

Til dit andet problem..
Når du har identificeret de to stringe, kan du encode dem med PHPs funktion: urlencode() - http://dk.php.net/manual/en/function.urlencode.php
Avatar billede mads2008 Nybegynder
28. marts 2012 - 11:17 #2
Hej InteeeL

Tak for dit svar.

Jeg har været på http://dk.php.net/manual/en/function.urlencode.php og flere andre steder - kan bare ikke finde ud af det.

Et Dump af $titles og $steder er bare en kilometer lang liste, som herunder, hvor $titel er et link til en tilmeldingsside.

$titel / $sted
_________________________________
Cross/motorlære / crosbanen
Dans (blandet) / Danseskolen
Dansk ekstraundervisning / undervisningssted
Dansk for sjov - lektiecafe / Skolen
Demokratidag / Rådhustorvet
Det kreative hold / Kunstskolen
Det lokale Ungeråd /
Digitalt musik / musikstudiet
Drengeklub 9220 / lokale 4
Dykning / Dukkerskolen
osv...

Ønsker egentlig bare en konkret løsning på problemerne.
Avatar billede olsensweb.dk Ekspert
28. marts 2012 - 11:28 #3
hvordan ser din xml fil ud ?? (begræns det til max 5 records)
eller lig den online så vi kan se den
Avatar billede mads2008 Nybegynder
28. marts 2012 - 11:42 #4
XML-listen er lang, men her er et uddrag

<holdListe>
  <hold>
    <geografi></geografi>
    <holddata>
      <holdnr>1010-121</holdnr>
        <startDato>01-01-2012</startDato>
        <SlutDato>01-01-2012</SlutDato>
        <startDato>6.00-23.00</startDato>
        <ugeDag>Søndag</ugeDag>
    </holddata>
    <diverse>
        <OpretTidspunkt>09-03-2012 12:02</OpretTidspunkt>
        <OpretAf>N1LLF</OpretAf>
        <skjulDatoInet>N</skjulDatoInet>
    </diverse>
  </hold>
  <hold>
    <geografi></geografi>
    <holddata>
      <holdnr>1013-121</holdnr>
      <startDato>01-01-2012</startDato>
      <SlutDato>01-01-2012</SlutDato>
      <startDato>6.00-23.00</startDato>
      <ugeDag>Søndag</ugeDag>
    </holddata>
    <diverse>
      <OpretTidspunkt>15-03-2012 11:37</OpretTidspunkt>
      <OpretAf>N1LKAB</OpretAf>
      <skjulDatoInet>N</skjulDatoInet>
    </diverse>
  </hold>
  <hold>
    <geografi></geografi>
    <holddata>
      <holdnr>9700-121</holdnr>
      <startDato>01-01-2012</startDato>
      <SlutDato>01-01-2012</SlutDato>
      <startDato>6.00-23.00</startDato>
      <ugeDag>Søndag</ugeDag>
    </holddata>
    <diverse>
      <OpretTidspunkt>26-01-2012 13:59</OpretTidspunkt>
      <OpretAf>N1LCSN</OpretAf>
      <skjulDatoInet>N</skjulDatoInet>
    </diverse>
  </hold>
</holdListe>
Avatar billede inteeeL Nybegynder
28. marts 2012 - 11:45 #5
<?php

$xml = simplexml_load_file("xmlfil.xml");
$titles = $xml->xpath('/holdListe/hold/holddata/titel');
$steder = $xml->xpath('/holdListe/hold/geografi/sted');

foreach( array_combine($titles, $steder) as $titel => $sted)  {
    echo "<a href='http://domænenavn.dk/index.php?type=sseek&seek=".urlencode($titel)."' style='font-7.  size:10px;'>$titel</a>$sted<br />";
}

?>


Sådan kunne du kombinere dine titler med steder - her skal rækkefølgen i de to arrays selvfølgelig passe. Urlencode er også implementeret. Din style kunne du godt rykke over i en CSS fil og så sætte en fælles class for a (link).
Avatar billede inteeeL Nybegynder
28. marts 2012 - 11:47 #6
<?php

$xml = simplexml_load_file("xmlfil.xml");
$titles = $xml->xpath('/holdListe/hold/holddata/titel');
$steder = $xml->xpath('/holdListe/hold/geografi/sted');

foreach( array_combine($titles, $steder) as $titel => $sted)  {
    echo "<a href='http://domænenavn.dk/index.php?type=sseek&seek=".urlencode($titel)."' style='font-7.  size:10px;'>$titel</a>$sted<br />";
}

?>


Så fik jeg parset url'en ordentligt. :-)
Avatar billede mads2008 Nybegynder
28. marts 2012 - 12:01 #7
inteeeL

foreach( array_combine($titles, $steder) as $titel => $sted)

...giver output Warning :

Warning: array_combine() [function.array-combine]: Both parameters should have an equal number of elements

urlencode ændrer ikke æøå - laver bare + tegn som mellemrum

Har også selv prøvet med
".urlencode(utf8_encode($input))."

Som laver:
- Ungdomsråd om til,
- UngdomsrÃ¥d, hvor å det gerne skulle være %E5 som her,
- Ungdomsr%E5d
Avatar billede inteeeL Nybegynder
28. marts 2012 - 12:44 #8
Det er klart, at du får en warning. Jeg regnede blot med, at hver titel havde et sted - er det ikke tilfældet da?

echo urlencode("Ungdomsråd");

Ovenstående udskriver hos mig følgende: Ungdomsr%E5d
- urlencode ændrer netop æ,ø,å.
Avatar billede olsensweb.dk Ekspert
28. marts 2012 - 13:00 #9
@mads2008 jeg kan ikke få din xml til at stemme med
$steder = $xml->xpath('/holdListe/hold/geografi/sted');

du mangler helt at angive sted inde i geografi, så dit sted array er tomt, har du derimod kun angivet det nogle steder er det klart de 2 array ikke har sammen størrelse


<hold>
    <geografi>
        <sted>test</sted>
    </geografi>
    <holddata>
        <titel>titel2</titel>
      <holdnr>1013-121</holdnr>
      <startDato>01-01-2012</startDato>
      <SlutDato>01-01-2012</SlutDato>
      <startDato>6.00-23.00</startDato>
      <ugeDag>Søndag</ugeDag>
    </holddata>
    <diverse>
      <OpretTidspunkt>15-03-2012 11:37</OpretTidspunkt>
      <OpretAf>N1LKAB</OpretAf>
      <skjulDatoInet>N</skjulDatoInet>
    </diverse>
  </hold>
Avatar billede mads2008 Nybegynder
28. marts 2012 - 13:15 #10
Der er felter som ikke er udfyldt. Det er ikke det jeg har brug for.

Her kommer det igen.

Som I nok vil kunne se på mit spørgsmål jeg fuldstændig lost i PHP syntax.

Koden med linienumre herunder  virker fint.

1.  $xml = simplexml_load_file("xmlfil.xml");
2.  $titles = $xml->xpath('/holdListe/hold/holddata/titel'); 
3.  $steder = $xml->xpath('/holdListe/hold/geografi/sted');
4. 
5.  foreach ($titles as $titel)  {
6.  echo "<a href='http://domænenavn.dk/ (...) style='font-7.  size:10px;'>$titel</a>$sted<br />";
8.  }

Jeg har brug for hjælp til 2 problemer.

1.
Linie 5: hvordan får jeg flettet $steder as $sted ind  her ($titles as $titel)  - min logik siger jo bare ($titles as $titel and $steder as $sted)?

2.
Linie 6: i $titel efter /index.php?type=sseek&seek=$titel' skal:
- mølleå oversættes til m%F8lle%E5
- Hva' så oversættes til Hva%27+s%E5
- osv..
Avatar billede inteeeL Nybegynder
28. marts 2012 - 13:43 #11
At stille spørgsmålet 2 gange er på ingen måder behjælpeligt, hvis du ønsker at få svar hurtigst muligt. Mine svar og ronols svar er løsningsforslag til dine spørgsmål, ikke blot irriterende svar. Det er klart, at ronols i sin forundren spørger, hvorfor du nogle steder mangler <sted>..</sted>. Hvis du kun nogen steder har sted og andre steder ikke har, holder funktionen array_combine ikke. Du kunne prøve at indsætte <sted></sted>, selvom den er tom - på den måde kan vil du få lige mange titler og steder, og så vil scriptet virke.

Spørgsmål 1: din logik siger forkert, se på svaret givet tidligere.

Spørgsmål 2: enten kan du benytte urlencode, ellers kan du bruge str_replace() til at erstatte æ,ø,å samt apostroffer. :-)
Avatar billede mads2008 Nybegynder
28. marts 2012 - 16:24 #12
Hej

Jeg var nok lige på kanten af arrogant - undskylder mange gange!

XML-dokumentet genereres automatisk og opdateres dagligt Der er mange kokke og desværre efterlades f.eks. sted indimellem tomt.

Jeg forsøger mig str_replace
Avatar billede olebole Juniormester
28. marts 2012 - 16:50 #13
<ole>

Det kunne lyde, som om du har gemt XML-filen som iso-8859-1 og bruger utf-8 i det dokument, som skal parse den. Og så er der jo sat vand over til ballade  =)

Prøv dette i stedet:

    $str = utf8_encode(file_get_contents('xmlfil.xml'));
    $xml = @simplexml_load_string($str);

/mvh
</bole>
Avatar billede mads2008 Nybegynder
28. marts 2012 - 17:14 #14
Tak

Ok så langt så godt, men...

Nu har jeg lavet urlencode output på både URL link og text.

De kommer forskelligt ud
echo "<a href=\"http://tilmelding.ungaalborg.dk/index.php?type=sseek&seek="[b]. urlencode($titel) ."\" style=\"font-size:14px;\">". urlencode($titel) ."</a>$sted<br />";


- Teksten som vises på skærmen er: Ungdomsr%C3%A5d
- Linket er Ungdomsråd

De er jo fuldstændig ens!

. urlencode($titel).
Avatar billede olebole Juniormester
28. marts 2012 - 17:17 #15
Du skal ikke bruge urlencode på indholdet. Læs #13  =)
Avatar billede mads2008 Nybegynder
30. juli 2013 - 13:12 #16
LUKKER! Kommer ikke videre med denne
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