Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

Udtrække hver enkelt print_r element

2 views
Skip to first unread message

Karl Erik Christensen

unread,
Oct 7, 2012, 12:31:26 PM10/7/12
to
Jeg får returneret data på xml-format ($xml_response)

Når jeg skriver:
print_r($xml_response);

får jeg en fin udskrift af de indeholdte data.

Jeg har tidligere fundet ud af at udtrække hver enkelt data, men nu kan
jeg ikke huske hvordan jeg gjorde, og jeg kan heller ikke finde min kode.

Jeg kan også bruge:
$pieces = explode(" ", $xml_response);

det giver:
Array ( [0] => version="1.0" [2] => encoding="UTF-8" [3] =>
standalone="yes"?> [4] => [5] => RM2L4T2iVV - osv.

Men det var jo bedre hvis man ikke skulle gætte sig frem til, hvilken
$pieces[?] man skal bruge.

Karl Erik.

--
http://dmwebdesign.dk/karlerik/

Anders Wegge Keller

unread,
Oct 7, 2012, 12:37:17 PM10/7/12
to
Karl Erik Christensen <no...@none.invalid> writes:

> Men det var jo bedre hvis man ikke skulle gætte sig frem til,
> hvilken $pieces[?] man skal bruge.

Det bliver noget skrøbeligt, hvis du vælger den løsning. Gå i stedet
efter den rigtige løsning, og brug XMLReader[1] eller XML Parser[2].

1. http://www.php.net/manual/en/book.xmlreader.php
2. http://www.php.net/manual/en/book.xml.php


--
/Wegge

Leder efter redundant peering af dk.*,linux.debian.*

Karl Erik Christensen

unread,
Oct 7, 2012, 9:48:23 PM10/7/12
to
Den 07-10-2012 18:37, Anders Wegge Keller skrev:
> Karl Erik Christensen <no...@none.invalid> writes:
>
>> Men det var jo bedre hvis man ikke skulle gætte sig frem til,
>> hvilken $pieces[?] man skal bruge.
>
> Det bliver noget skrøbeligt, hvis du vælger den løsning. Gå i stedet
> efter den rigtige løsning, og brug XMLReader[1] eller XML Parser[2].
>
> 1. http://www.php.net/manual/en/book.xmlreader.php
> 2. http://www.php.net/manual/en/book.xml.php

Tak for linkene - som satte et større studium i gang.

Men det er ikke første gang jeg oplever, at de "officielle" manualer er
skrevet af folk, som gør en ære i at skrive på et avanceret niveau.
De er fyldte med eksotiske og uhyre avancerede eksempler. Ikke noget med
"husmands niveau" - nej fy-da.

Først da jeg fandt gode gamle W3School, kom gennembruddet:
http://www.w3schools.com/php/php_xml_simplexml.asp

Karl Erik Christensen

unread,
Oct 8, 2012, 9:06:57 AM10/8/12
to
Den 08-10-2012 03:48, Karl Erik Christensen skrev:

> Først da jeg fandt gode gamle W3School, kom gennembruddet:
> http://www.w3schools.com/php/php_xml_simplexml.asp
>
> Karl Erik.
>

Da xml-outputtet ikke er en fil, men en streng, bliver koden:

$xml = new simpleXMLElement($xml_response);
$i=0; foreach($xml->children() as $child[$i]) {
$i++;
}

Det fungerer - nu har jeg alle mine data i $child[#], og da jeg ved
hvilke data jeg henter, er det såre simpelt at bruge dem.

Anders Wegge Keller

unread,
Oct 8, 2012, 12:41:12 PM10/8/12
to
Karl Erik Christensen <no...@none.invalid> writes:

Er det smart? Hvad nu hvis der er to navngivne værdier der bytter
plads i den xml-streng du modtager, eller der kommer et ekstra felt
ind? Så vil du være slemt på spanden, hvis du ikke sørger for at pille
præcis de ting ud du har brug for, eller i det mindste får
child-nodens navn med i dit array.

Karl Erik Christensen

unread,
Oct 8, 2012, 1:05:24 PM10/8/12
to
Den 08-10-2012 18:41, Anders Wegge Keller skrev:
> Er det smart? Hvad nu hvis der er to navngivne værdier der bytter
> plads i den xml-streng du modtager, eller der kommer et ekstra felt
> ind? Så vil du være slemt på spanden, hvis du ikke sørger for at pille
> præcis de ting ud du har brug for, eller i det mindste får
> child-nodens navn med i dit array.

Værdierne burde komme i den rækkefølge de requestes i, og kun de værdier
der bedes om kommer.
Men jeg kan godt se at de ligger en fejlmulighed her.

Det vil være forholdsvis nemt at inkludere child-nodens navn i arrayet.

Anders Wegge Keller

unread,
Oct 8, 2012, 1:39:35 PM10/8/12
to
Karl Erik Christensen <no...@none.invalid> writes:

> Den 08-10-2012 18:41, Anders Wegge Keller skrev:
> > Er det smart? Hvad nu hvis der er to navngivne værdier der bytter
> > plads i den xml-streng du modtager, eller der kommer et ekstra felt
> > ind? Så vil du være slemt på spanden, hvis du ikke sørger for at pille
> > præcis de ting ud du har brug for, eller i det mindste får
> > child-nodens navn med i dit array.
>
> Værdierne burde komme i den rækkefølge de requestes i, og kun de
> værdier der bedes om kommer.
> Men jeg kan godt se at de ligger en fejlmulighed her.

Hvis dit interface garanterer det, burde du være på den sikre
side. Men selv med den garanti, bliver du afhængoig af at noget kode
du ikke selv har kontrol over, opfører sig fejlfrit.

> Det vil være forholdsvis nemt at inkludere child-nodens navn i arrayet.

Så gør det, og være passende paranoid overfor svaret. En god del af
de hotlinesager jeg ser, stammer fra eksterne systemer der ikke
opfører sig som de skal.

Leif Neland

unread,
Oct 8, 2012, 3:21:17 PM10/8/12
to
Følgende er skrevet af Anders Wegge Keller:
Eller opfører sig således som modtageren tror de skal.

Et eksempel er netop at modtageren tager for givet at de enkelte
variable i svaret altid kommer i den samme rækkefølge.

Leif

--
Husk kørelys bagpå, hvis din bilfabrikant har taget den idiotiske
beslutning at undlade det.


Anders Wegge Keller

unread,
Oct 8, 2012, 3:36:06 PM10/8/12
to
Leif Neland <le...@neland.dk> writes:

> Følgende er skrevet af Anders Wegge Keller:

>> Så gør det, og være passende paranoid overfor svaret. En god del
>> af de hotlinesager jeg ser, stammer fra eksterne systemer der ikke
>> opfører sig som de skal.

> Eller opfører sig således som modtageren tror de skal.
>
> Et eksempel er netop at modtageren tager for givet at de enkelte
> variable i svaret altid kommer i den samme rækkefølge.

Protokollerne mod vores eksterne systemer er lagt i spændetrøje, i en
grad så der ikke burde være mulighed for at fortolke på det. Det
afholder selvfølgelig ikke folk fra at prøve på at gøre det
alligevel.

Klassikeren er fra en lufthavn, hvor telegrammet var et veried-field
telegram med / som separator. Der kunne kunden ikke helt forstå at de
ikke kunne bruge N/A som standpladsangivelse for morgendagens flights.
0 new messages