Portál AbcLinuxu, 10. května 2025 05:24

Dotaz: PHP + SimpleXML objekt v cyklu FOR

21.9.2009 20:03 Open Mage | skóre: 24 | Lom
PHP + SimpleXML objekt v cyklu FOR
Přečteno: 741×
Odpovědět | Admin

Ahoj,

mam potize v importu XML souboru pomoci SimpleXML v PHP. Data jsou bez potizi, ale ke kazdymu zaznamu chci i ID, ktery je jako atribut. Normalne pomoci foreach kdyz nemusim resit pozici "kurzoru" v objektu SimpleXML to jde jak po masle. Ale pokud to delam pro FOR cyklus, jelikoz resim jednotlivy casti a mam na to nejakej algoritmus, kterej to rozdeli a importuje postupne - tak jsou potize. Ilustracni cast kodu vytrzena z kontextu vypada asi takhle:

$sxml = simplexml_load_file($this->EXTRACT_FOLDER . $this->xmlFile);

for ($i = $startingWith; $i < $limit; $i++) {
$vmAtributes = $sxml->ELEMENT[$i]->attributes();
$vmAtr = $vmAtributes['id'];


Tenhle kod ovsem nahlasi nize uvedenou hlasku a at delam co delam, proste se touhle jinak beznou cestou nikam nedostavam. Jediny co vim, ze kdyz dam natvrdo jeste pred FOR cyklem treba $sxml->ELEMENT[12345]->attributes() ... tak to projde, ale do cyklu se nejak nedostane zrejme ani samotny objekt SimpleXML - tam uz nezjistim nejen atributy elementu, ale ani vnitrni prvky pomoci inkrementovane hodnoty. Setkal se s tim nekdo? Mozna delam nejak zacatecnickou chybu, o tom, ze bych nemohl volat instanci tridy inicializovanou vne cyklu nejak nevim, ale uz to tak skoro vypada... Uz zacinam byt trochu nervozni :)

Fatal error: Call to a member function attributes() on a non-object in

Diky moc,
Standa

Stanislav Puffler, DiS. specialista na internet marketing a ecommerce www.openmage.cz tel. 773 565 747
Nástroje: Začni sledovat (0) ?Zašle upozornění na váš email při vložení nového komentáře.

Odpovědi

21.9.2009 20:49 error414 | skóre: 12 | blog: error414
Rozbalit Rozbalit vše Re: PHP + SimpleXML objekt v cyklu FOR
Odpovědět | | Sbalit | Link | Blokovat | Admin

$myxml ='<?xml version="1.0"?>
<main  version="1.0">
  <polozky>
      <polozka id="1">
        <cena>25</cena>
        <name>hustej mobil</name>
      </polozka>
      <polozka  id="2">
        <cena>255</cena>
        <name>mycka rybicek</name>
      </polozka>
  </polozky>
</main>';

 
$xml = simplexml_load_string($myxml);
for($i = 0; $i < count($xml->polozky->polozka); $i++){
  echo $xml->polozky->polozka[$i]->cena;
  echo $xml->polozky->polozka[$i]['id'];
}

snad ti to pomuze

22.9.2009 18:04 Open Mage | skóre: 24 | Lom
Rozbalit Rozbalit vše Re: PHP + SimpleXML objekt v cyklu FOR

Tyhle varianty uz jsem zkousel, ale kdepak. Pes bude bud zakopanej jinde nebo nevim. Pokud bych ty tvy dva ECHO prikazy mel pred smyckou FOR a misto $i dosadil index v rozsahu, kterej v XML souboru skutecne je, pak se to zobrazi ok. Pokud to samy udelam ve smycce, zobrazi se prazdno... jako by tam fakt ten objekt (u tebe $xml) nebyl viditelnej.

Stanislav Puffler, DiS. specialista na internet marketing a ecommerce www.openmage.cz tel. 773 565 747
22.9.2009 18:13 Open Mage | skóre: 24 | Lom
Rozbalit Rozbalit vše Re: PHP + SimpleXML objekt v cyklu FOR

Jeste doplnim. Pokud v tom cyklu FOR dam vypsat (ac je to samo blbost) urcitej prvek natvrdo (treba echo $sxml->ELEMENT[100]->PRVEK;), tak to projde. Takze co neumi uvnitr toho cyklu je echo $sxml->ELEMENT[$i]->PRVEK. Nevim ovsem proc, jelikoz zase necham-li echo $i, tak hezky vypise celou tu radu indexu a nema problem. Nemusi byt to $i nejak v uvozovkach nebo neco? Dalsi dulezita informace je, ze takovy kazdy prvek vkladam na danou pozici do pole a to pole pak vlozim jako jeden prvek do hlavniho pole - na konci pruchodu tim FOR cyklem.

Stanislav Puffler, DiS. specialista na internet marketing a ecommerce www.openmage.cz tel. 773 565 747
22.9.2009 20:25 Ash | skóre: 53
Rozbalit Rozbalit vše Re: PHP + SimpleXML objekt v cyklu FOR
Ta poslední důležitá informace se mi zdá irelevantní, pokud to neumíte ani vypsat, tak je jedno že se to někam snažíte vkládat.

Hoďte sem ten fragment kódu který před for cyklem vypisuje prvky (s indexy natvrdo), v cyklu vypisuje indexy správně jako čísla ale prvky s daným indexem prázdné. Viděl bych to na nějaký překlep, viditelnost proměnných problém nebude.
24.9.2009 21:11 Open Mage | skóre: 24 | Lom
Rozbalit Rozbalit vše Re: PHP + SimpleXML objekt v cyklu FOR

Tak jsem na to prisel. Chyba byla jak jinak na moji strane, ikdyz dost skryta - do cyklu FOR jsem predaval v ramci OOP hodnoty pro prvni a druhy argument a pri vypsani samotneho id pruchodu cyklem bylo vse ok. Nicmene poradove cislo v SimpleXML objektu je zrejme potreba predavat explicitne jak INT... Tudiz vse vyresilo dosazeni funkce intval:

for($i = intval($startingWith); $i < intval($limit); $i++) {

treba to pomuze i nekomu dalsimu. Stane se to zrejme pouze v pripade kdy je FOR v metode, ktera prijima odjinud argumenty $startingWith a $limit. Hledal jsem chybu jinde, nez by clovek cekal, ze bude...

Stanislav Puffler, DiS. specialista na internet marketing a ecommerce www.openmage.cz tel. 773 565 747

Založit nové vláknoNahoru

Tiskni Sdílej: Linkuj Jaggni to Vybrali.sme.sk Google Del.icio.us Facebook

ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.