Avatar billede maxiz Nybegynder
10. juni 2009 - 17:35 Der er 7 kommentarer og
1 løsning

XML & PHP sortables

jeg har en xml fil med følgende:

<mad>
<frokost>
<navn>æble</navn>
<kategori>frugt</kategori>
</frokost>
<frokost>
<navn>kage</navn>
<kategori>Dessert</kategori>
</frokost>
<frokost>
<navn>banan</navn>
<kategori>frugt</kategori>
</frokost>
</mad>


Ud fra det skal jeg have et output... Det skal kategoriseres således:

Frugt:
-banan
-æble
Kategori slut

Dessert:
-kage
Kategori slut



Således at "frokosten" bliver sat i kategorier i alfabetisk rækkefølge, og kategorierne blier sat i alfabetisk rækkeføle.

Herudover skal der være navnet på kategorien som en overskrift til indelingerne, og hertil en "ende", hvor der kan indføres yderligere tekster efter behov.

Nogen der kan hjælpe :) ?
Avatar billede repox Seniormester
10. juni 2009 - 19:09 #1
Du har vel simplexml?

<?php

xml = new SimpleXMLElement($xml);
$men = array();

foreach($xml->frokost as $frokost)
{
    $tmpKat = (string)$frokost->kategori;
    if(!isset($men[$tmpKat]))
        $men[$tmpKat] = array();
       
    $men[$tmpKat][] = (string)$frokost->navn;

}

print_r($men);

?>

$men er så et opdelt array...
Avatar billede maxiz Nybegynder
10. juni 2009 - 23:46 #2
det hjælper mig ikke særlig meget.. skær det lidt mere ud :D
Avatar billede repox Seniormester
10. juni 2009 - 23:55 #3
<?php

$xml = "her skal din xml komme ind på en eller anden måde";

$xml = new SimpleXMLElement($xml);
$men = array();

foreach($xml->frokost as $frokost)
{
    $tmpKat = (string)$frokost->kategori;
    if(!isset($men[$tmpKat]))
        $men[$tmpKat] = array();
     
    $men[$tmpKat][] = (string)$frokost->navn;

}

asort($men);

foreach($men as $kategori => $produkter)
{
    echo $kategori."<br />";

    foreach($produkter as $produkt)
        echo "-".$produkt."<br />";

    echo $kategori."<br /><br />";
}
?>

så er den vist også foræret...
Avatar billede maxiz Nybegynder
11. juni 2009 - 09:20 #4
Tak for hjælpen, men følgende virker ikke:

<?php
header('Content-Type: text/html; charset=utf-8');
setlocale(LC_ALL, 'danish');

$xml = new DOMDocument();
$xml->load("/test/links.xml");
$xml = new SimpleXMLElement($xml);
$men = array();

foreach($xml->frokost as $frokost)
{
    $tmpKat = (string)$frokost->kategori;
    if(!isset($men[$tmpKat]))
        $men[$tmpKat] = array();
   
    $men[$tmpKat][] = (string)$frokost->navn;

}

asort($men);

foreach($men as $kategori => $produkter)
{
    echo $kategori."<br />";

    foreach($produkter as $produkt)
        echo "-".$produkt."<br />";

    echo $kategori."<br /><br />";
} ?>
Avatar billede repox Seniormester
11. juni 2009 - 09:27 #5
Nej, det har du ret i.
Den parameter du smider ind i SimpleXMLElement() skal være en streng af XML. Du smider en instans af objectet DOMDocument ind og derfor vil det ikke virke.
Hvis du skal have det til at virke skal du rette linien til:

$xml = new SimpleXMLElement($xml->saveXML());
Avatar billede maxiz Nybegynder
11. juni 2009 - 10:59 #6
skriv et svar :) mange tak for hjælpen, det virker helt fint
Avatar billede repox Seniormester
11. juni 2009 - 11:13 #7
Værsgo'
Avatar billede maxiz Nybegynder
11. juni 2009 - 11:25 #8
tak ;p og så svar lgie på din post :D
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