Avatar billede pblv Nybegynder
02. februar 2006 - 18:22 Der er 1 løsning

XML-læsning i PHP

Hejsa,

Jeg har oprettet et spørgsmål under PHP, men det burde måske have været her, så nu prøver vi:

Jeg har en xml_parser, der er lavet ved hjælp af følgende klasse jeg har fundet:

<?php

function xml2array($xml)
{
    $file = $xml;
    global $stack;
    $stack = array();
    $data = array();

    $xml_parser = xml_parser_create('ISO-8859-1');
    xml_set_element_handler($xml_parser, "startTag", "endTag");
    xml_set_character_data_handler($xml_parser, "cdata");

    $data = xml_parse($xml_parser,file_get_contents($file));
   
    if(!$data)
        die(sprintf("XML error: %s at line %d", xml_error_string(xml_get_error_code($xml_parser)), xml_get_current_line_number($xml_parser)));

    xml_parser_free($xml_parser);

    if ($stack[0][name] != "ERROR")
        return $stack;
    else
        return false;
}

// FUNKTIONER TIL AT LÆSE XML-FILEN IND I ET ARRAY

function startTag($parser, $name, $attrs)
{
    global $stack;
    $tag = array("name"=>$name, "attrs"=>$attrs); 
    array_push($stack,$tag); 
}

function cdata($parser, $cdata)
{
    global $stack,$i;
    if(trim($cdata))
    {   
        $stack[count($stack)-1]['cdata'] = $cdata;   
    }
}

function endTag($parser, $name)
{
    global $stack; 
    $stack[count($stack)-2]['children'][] = $stack[count($stack)-1];
    array_pop($stack);
}

?>

Den virker fint på de felste XML-ark. Men f.eks. følgende XML-ark:
http://borsen.dk/newsfeed/rss/

Virker den ikke ordentligt på. Det er som om de skærer noget at dataen væk i Cdata ved æ ø eller å.

Jeg har prøvet at ændre ISO-8859-1 til UTF-8 osv, men den vil simpelthen ikke parse den ordentligt.
Avatar billede pblv Nybegynder
02. februar 2006 - 21:48 #1
Der var hemmelige linieskift i.

Blev løst med
$stack[count($stack)-1]['cdata'].= $cdata;
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