Avatar billede barlach Nybegynder
28. februar 2001 - 18:05 Der er 7 kommentarer og
1 løsning

empty delimiter ????

jeg prøver at parse noget xml med php/Apache-server og får en fejl om en \"empty delimiter\"
Jeg har fundet frem til at det er flg. xml, parseren ikke kan li\':
<show>
      <ShowNo>1</ShowNo>
      <ShowDate>06.03.2001</ShowDate>
      <ShowTime>19:30</ShowTime>
      <ShowWeekday>Tirsdag</ShowWeekday>
      <ShowPage href=\"00001.html\">testtest</ShowPage>
      <Info>salen</Info>
      <FreeSeats>615</FreeSeats>
      <PriceGroup>
        <PGColor>#FFFF00</PGColor>
        <PGName>PG1</PGName>
        <PGPrice>185,00 kr</PGPrice>
        <PGFreeSeats>8</PGFreeSeats>
      </PriceGroup></show>

men jeg kan ikke se hvad der er galt med det?!?!
...og hvad er en \"empty delimiter\" ?
Avatar billede getalife Nybegynder
28. februar 2001 - 18:50 #1
Der er ikke nogen problemer med dit XML, så fejlen må ligge i dit PHP.
Hvordan ser den ud?
Avatar billede gandalfthewhite Nybegynder
28. februar 2001 - 19:17 #2
Prøv at sætte indholdet i dit PGColor tag i en CData tag, syntaks:
<![CDATA[Indsæt tekst her]]>

Jeg er ikke sikker på at # udgør et problem men det er da værd at teste.
Avatar billede oleprds Nybegynder
28. februar 2001 - 22:17 #3
Lytter med
Avatar billede barlach Nybegynder
01. marts 2001 - 09:40 #4
php fylder jo helt sindssygt meget men her er noget af det...

function characterData($parser,$data){
  global $eventNoV,$showNoV,$eventNameV,
          $showDateV,$freeSeatsV,$showPageV,
          $currentTag,$sysIdV,$clientIdV,
          $eventNotesV,$typeV,$currencyV,
          $infoV,$showTimeV,$showWeekdayV,
          $nameV,$streetV,$zipV,$pgIdV,$pgCount,$pgV;
       
    if(strcmp($currentTag,\"EventNo\")==0){
          $eventNoV .= $data;
    }elseif(strcmp($currentTag,\"ShowNo\")==0){
        $showNoV .= $data;
    }
    elseif(strcmp($currentTag,\"EventName\")==0){
        $eventNameV .= $data;
    }
    elseif(strcmp($currentTag,\"ShowDate\")==0){
        $showDateV .= $data;
    }
    elseif(strcmp($currentTag,\"FreeSeats\")==0){
        $freeSeatsV .= $data;
    }
    elseif(strcmp($currentTag,\"ShowPage\")==0){
      $showPageV .= $data;
    }
    elseif(strcmp($currentTag,\"SysId\")==0){
        $sysIdV .= $data;
    }
    elseif(strcmp($currentTag,\"ClientId\")==0){
        $clientIdV .= $data;
    }
    elseif(strcmp($currentTag,\"EventNotes\")==0){
        $eventNotesV .= $data;
    }
    elseif(strcmp($currentTag,\"Type\")==0){
        $typeV .= $data;
    }
    elseif(strcmp($currentTag,\"Currency\")==0){
        $currencyV .= $data;
    }
    elseif(strcmp($currentTag,\"Info\")==0){
        $infoV .= $data;
    }
    elseif(strcmp($currentTag,\"ShowTime\")==0){
        $showTimeV .= $data;
    }
    elseif(strcmp($currentTag,\"ShowWeekday\")==0){
        $showWeekdayV .= $data;
    }
    elseif(strcmp($currentTag,\"Name\")==0){
        $nameV .= $data;
    }
    elseif(strcmp($currentTag,\"Street\")==0){
        $streetV .= $data;
    }
    elseif(strcmp($currentTag,\"ZIP\")==0){
        $zipV .= $data;
    }
    elseif(strcmp($currentTag,\"PGName\")==0){
          $pgV[$pgCount]=$data;
       
       
    }
    elseif(strcmp($currentTag,\"PGPrice\")==0){
        $pgV[$pgCount]=$data;
     
    }
    elseif(strcmp($currentTag,\"PGFreeSeats\")==0){
      $pgV[$pgCount]=$data;
     
    }
}


function readShows() {
  global $file,$shows;
 
  $xml_parser = xml_parser_create();
  xml_set_element_handler($xml_parser,\"startElement\",\"endElement\");
  xml_set_character_data_handler($xml_parser,\"characterData\");
  xml_parser_set_option($xml_parser,XML_OPTION_CASE_FOLDING,false);
 
 
  if(!($fp=fopen($file,\"r\"))){
      die(\"kan ikke aabne $file\");
  }
  while(($data=fread($fp,4096))){
      if(!xml_parse($xml_parser,$data,feof($fp))){
        die(sprintf(\"XML error at line %d column %d\",
                      xml_get_current_line_number($xml_parser),
                      xml_get_current_column_number($xml_parser)));
      }
  }
   
    xml_parser_free($xml_parser);
   
    return $shows;
}

function printShow(
$eventNoV,$showNoV,$eventNameV,$showdateV,
$freeSeatsV,$showPageV,$hrefV,$sysIdV,
$clientIdV,$eventNotesV,$typeV,
$currencyV,$infoV,$showTimeV,
$showWeekdayV,$nameV,$streetV,$zipV,$pgIdV,$pgV){
 
        $inf=array($nameV,$streetV,$zipV,$eventNotesV);             
        $infs=serialize($inf);
          $infs=urlencode($infs);   
    $bestildata=array(); 

      ...samt en masse print-funktioner..
}
Avatar billede barlach Nybegynder
06. marts 2001 - 13:20 #5
gandalf, det hjalp ikke. Det ser ud til at det er Apache\'s xml parser for det virker på en IIS.

Kan man installere en ny xml parser på apache ?
Avatar billede janegil Nybegynder
22. marts 2001 - 11:29 #6
<PGColor>#FFFF00</PGColor>
er brannulovlig XML – # markerer starten på en entitet.

CDATA er en vei ut. Men CSS har nå en alternativ måte å definere farver, nettopp fordi den gamle gir problemer i XML:
<PGColor>rgb(255,255,0)</PGColor>

Vet ikke hvor gamle browsere som kan
håndtere det nye farveformatet...
Avatar billede barlach Nybegynder
28. marts 2001 - 10:20 #7
ups...den skulle ikke have været accepteret..

det er ikke # der er problemet. Det har jeg allerede prøvet
Avatar billede janegil Nybegynder
28. marts 2001 - 10:40 #8
Det har du jo rett i. Jeg blander sammen # og &, det er sistnevnte som er forbudt.

Og XMetaL editoren har ingen innvendinger mot koden din.

Så det kan se ut til at det er et problem med php-parseren, og at jeg skylder deg 100.

Kan det være at php-parseren selv bruker \'\"\', så du skulle prøve <ShowPage href=\'00001.html\'> ?

Eller at den bruker \':\' til sine egne obskure formål, så det skal være
<ShowTime>19.30</ShowTime>
eller
<ShowTime>19<![CDATA[:]]>30</ShowTime>
?


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
Kurser inden for grundlæggende programmering

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