Avatar billede stigma Nybegynder
26. april 2012 - 14:36 Der er 2 kommentarer og
1 løsning

simplexml_load_file()

Hej.

Jeg er i færd med at udtrække nogle data fra et XML dokument som ser således ud:

<?xml version="1.0" encoding="utf8"?>
<component appfolder="app">
    <author>
        <name>Jeppe Christiansen</name>
        <company>SiteTech Webudvikling ApS</company>
        <contact>
            <email>jeppe[at]sitetech.dk</email>
            <phone>000</phone>
            <address>xxx</address>
            <postal>xxx</postal>
            <city>0000</city>
        </contact>
    </author>
</component>

Jeg gør følgende, for at gemme xml data i et array.

$data = simplexml_load_file('setup.xml);

$author = array(
    "author_name"         => $data->author->name,
    "author_company"    => $data->author->company,
    "author_email"         => $data->author->contact->email,
    "author_phone"     => $data->author->contact->phone,
    "author_address"     => $data->author->contact->address,
    "author_city"         => $data->author->contact->city,
    "author_postal"     => $data->author->contact->postal);

Med overstående metode havde jeg regnet med at f.eks værdien for $author['author_name'] ville være en streng (I dette tilfælde 'Jeppe Christiansen') - Men tværtimod er det et SimpleXMLElement Object, her er et udklip fra print_r($author):

Array
(
    [author_name] => SimpleXMLElement Object
        (
            [0] => Jeppe Christiansen
        )

    [author_company] => SimpleXMLElement Object
        (
            [0] => SiteTech Webudvikling ApS
        )

Jeg ved ikke om jeg arbejder forkert med denne simplexml_load_file(); eller om der er andre alternativer til denne. Har dog fundet en løsning til dette, som er at skrive (string) foran objektet, se herunder:

$author = array(
    "author_name"         => (string)$data->author->name,
    "author_company"    => (string)$data->author->company,
    "author_email"         => (string)$data->author->contact->email,
    "author_phone"     => (string)$data->author->contact->phone,
    "author_address"     => (string)$data->author->contact->address,
    "author_city"         => (string)$data->author->contact->city,
    "author_postal"     => (string)$data->author->contact->postal);

Med overstående vil et udklip fra print_r($author) se ud således:

Array
(
    [author_name] => Jeppe Christiansen
    [author_company] => SiteTech Webudvikling ApS

Dog syntes jeg det virker som en lidt 'snyde' måde at gøre det på, ved selvfølgelig ikke om dette er det rigtige at gøre - Men vil egentlig bare gerne forhøre mig her, om der er andre måder at få mig streng sat rigtig ind i dette array, uden at det bliver til et multidimentionelt array.

På forhånd mange tak,
Jeppe Christiansen.
Avatar billede inteeeL Nybegynder
26. april 2012 - 22:15 #1
Det er ikke en "snyde" måde, men faktisk sådan, det skal gøres. SimpleXML Object skal "gøres" til en string. Det kan også gøres sådan her:
$data->author->name__toString()
Avatar billede stigma Nybegynder
26. april 2012 - 22:32 #2
Aah okey - Jeg syntes bare det virkede som sådan en ukorrant måde at gøre det på. Syntes også bare det var mærkeligt at den lavede det om til et array. Men ski'ået!

Smid et svar! :)
Avatar billede inteeeL Nybegynder
27. april 2012 - 08:01 #3
Du er ikke den første, der er stødt på det "problem".
- Svar. :-)
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