Avatar billede nicocarlos Nybegynder
08. oktober 2007 - 15:40 Der er 8 kommentarer og
1 løsning

Læs xml med php

Hejsa, jeg har prøvet at læse nogle af de spørgsmål som ellers er herinde og har forsøgt at strikke noget sammen:

test.xml:

<kursus id="1">
<segment>100</segment>
<Pris>
<Periode Startdato="01-01-07" Slutdato="03-01-07">
  <Pris>400</Pris>
  <Prisudenmoms Moms="25">300</Prisudenmoms>
</Periode>
<Periode Startdato="22-06-07" Slutdato="24-06-07">
  <Pris>400</Pris>
  <Prisudenmoms Moms="25">300</Prisudenmoms>
</Periode>
</Pris>
</kursus>

test.php:

  <?php
  $g_periode = array();
  $g_elem = null;
 
  function startElement( $parser, $name, $attrs )
  {
  global $g_periode, $g_elem;
  if ( $name == 'Periode' ) $g_periode []= array();
  $g_elem = $name;
  }
 
  function endElement( $parser, $name )
  {
  global $g_elem;
  $g_elem = null;
  }
 
  function textData( $parser, $text )
  {
  global $g_periode, $g_elem;
  if ( $g_elem == 'Pris' ||
  $g_elem == 'Prisudenmoms' )
  {
  $g_periode[ count( $g_periode ) - 1 ][ $g_elem ] = $text;
  }
  }
 
  $parser = xml_parser_create();
 
  xml_set_element_handler( $parser, "startElement", "endElement" );
  xml_set_character_data_handler( $parser, "textData" );
 
  $f = fopen( 'test.xml', 'r' );
 
  while( $data = fread( $f, 4096 ) )
  {
  xml_parse( $parser, $data );
  }
 
  xml_parser_free( $parser );
 
  foreach( $g_periode as $kursus )
  {
  echo $kursus['Pris']." - ".$kursus['Prisudenmoms']." - ";
  }
  ?>

Det er første gang jeg roder med php,xml,parse - og det er nok også derfor det ikke virker, der sker nemlig ikke noget.

Faktisk vil jeg gerne have at den ignorerer <segment> og så henter og udskriver informationen om de forskellige perioder med Startdato, Slutdato, pris, Moms og prisudenmoms.

Håber der er en der kan hjælpe eller har et link til en god tutorial, jeg har dog prøvet at læse et par stykker nu

På forhånd tak
Avatar billede nicocarlos Nybegynder
09. oktober 2007 - 12:43 #1
Nå nu har jeg fået strikket noget sammen og får et print_r der hedder:

SimpleXMLElement Object ( [@attributes] => Array ( [id] => 1 ) [segment] => 100 [Pris] => SimpleXMLElement Object ( [Periode] => Array ( [0] => SimpleXMLElement Object ( [@attributes] => Array ( [Startdato] => 01-01-07 [Slutdato] => 03-01-07 ) [Pris] => 400 [Prisudenmoms] => 300 ) [1] => SimpleXMLElement Object ( [@attributes] => Array ( [Startdato] => 22-06-07 [Slutdato] => 24-06-07 ) [Pris] => 400 [Prisudenmoms] => 300 ) ) ) )

Men jeg ved så bare ikke lige helt, hvordan jeg får fat i det array der drejer om perioden. Har prøvet med:

foreach($xmlData->Periode as $periode) {
    print("<h2>" . $periode->Pris . "</h2><br />");
}

men den vil ikke rigtig :D
Avatar billede nicocarlos Nybegynder
09. oktober 2007 - 12:50 #2
Det må være fordi jeg også har gang i multi-dimensionale arrays at jeg koger rundt i det :/
Avatar billede nicocarlos Nybegynder
09. oktober 2007 - 21:25 #3
Ingen?
Avatar billede nicocarlos Nybegynder
09. oktober 2007 - 21:57 #4
SimpleXMLElement Object
(
    [@attributes] => Array
        (
            [id] => 1
        )

    [segment] => 100
    [Pris] => SimpleXMLElement Object
        (
            [Periode] => Array
                (
                    [0] => SimpleXMLElement Object
                        (
                            [@attributes] => Array
                                (
                                    [Startdato] => 01-01-07
                                    [Slutdato] => 03-01-07
                                )

                            [Pris] => 400
                            [Prisudenmoms] => 300
                        )

                    [1] => SimpleXMLElement Object
                        (
                            [@attributes] => Array
                                (
                                    [Startdato] => 22-06-07
                                    [Slutdato] => 24-06-07
                                )

                            [Pris] => 400
                            [Prisudenmoms] => 300
                        )

                )

        )

)

Har dette nu lidt mere overskueligt, men kan ikke få printet, de forskellige ting, er der en der kan hjælpe? :D
Avatar billede nicocarlos Nybegynder
09. oktober 2007 - 22:17 #5
har fået løst problemet, tak mig selv :D
Avatar billede donslund Nybegynder
12. oktober 2007 - 14:42 #6
Og hvad var løsningen? Det ville hjælpe vi andre.
Avatar billede nicocarlos Nybegynder
13. oktober 2007 - 22:52 #7
F.eks:
$xmldato = $xmlData->Pris[0]->Periode[0]["StartDato"];
Avatar billede nicocarlos Nybegynder
13. oktober 2007 - 22:53 #8
Og jeg har lavet det med SimpleXML, istedet for det jeg startede ud med ;D
Avatar billede nicocarlos Nybegynder
13. oktober 2007 - 22:55 #9
og det er i sig selv rimlig "simpelt":

$xmlFileData = file_get_contents("ditxml.xml");
$xmlData = new SimpleXMLElement($xmlFileData);

Så har du din fil og skal bare få udskrevet det.
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