SadDemon Posted June 21, 2007 Author Report Share Posted June 21, 2007 Vai tie 8 Mb operatīvās atmiņas ir vienlīdzīgi *.php faila apjoms + parsējamā *.xml faila apjoms? ..vai kā es varu būt pārliecināts par to, cik šī funkcija aizņem operatīvās atmiņas? Link to comment Share on other sites More sharing options...
bubu Posted June 21, 2007 Report Share Posted June 21, 2007 Nē, php faila izmēram ar to nav sakara. Visvairāk jau atmiņas patērēs ielasītie stringi un citi dati, tb tavs xml fails. Taču ņem vērā, ka vienam xml baitam neatbildīs precīzi viens baits atmiņā, jo tā DOM bibliotēka iekšienē var veidot visādas viltīgas datu struktūras, ka aizņem vairāk vietas. Bet jā, pēc noklusējuma konfigurācijas tu nevarēsi noparsēt xml failu izmērā lielāku par 8MB (īstenībā daudz mazāku). Link to comment Share on other sites More sharing options...
GedroX Posted June 21, 2007 Report Share Posted June 21, 2007 Var izmantot xml_parse funkcijas. Būs sarežģītāk, bet vismaz nepiegružos atmiņu. Nolokosi failu, lādēsi failu ar xml_parse pa dažiem kB un vienlaicīg rakstīsi jaunajā failā. Beigās pārrakstīsi veco failu ar jauno un atlokosi. Link to comment Share on other sites More sharing options...
SadDemon Posted August 21, 2007 Author Report Share Posted August 21, 2007 (edited) khmm.. ievietoju jautājumu klāt iepriekšējam, jo lieta atbilstoša.. Problēma ir - nekādi neprotu piekļūt iekšējiem mezgliem.. izmantojam php dom funkcijas.. *.xml faila izrāvums: <node label = "---- galerijas"> <node label = "---- (galerija)"> <node label = "---- (kategorija)"> <node label = "----.jpg" /> <node label = "----.jpg" /> <node label = "----.jpg" /> </node> <node label = "---- (kategorija)"> <node label = "----.jpg" /> <node label = "----.jpg" /> <node label = "----.jpg" /> </node> u.t.t.. ..piemēram, kā iegūt iekšējā mezgla (kur "----.jpg") label atribūtu? Ja rodas jautājums - kāpēc ir tikai "node" mezgli un "lable" atribūti - tad atbilde ir - paredzēts Flash Tree komponentam.. Jau iepriekš pateicos! Edited August 21, 2007 by SadDemon Link to comment Share on other sites More sharing options...
bubu Posted August 21, 2007 Report Share Posted August 21, 2007 Kas nav skaidrs? childsNodes[x] -> childNode[y] -> childNodes[z] -> getAttribute("label") Link to comment Share on other sites More sharing options...
SadDemon Posted August 22, 2007 Author Report Share Posted August 22, 2007 Nju, ja daram: $node = $dom->childNodes[0]->childNodes[0]->getAttribute("label"); ..tad seko "Fatal error: Cannot use object of type DOMNodeList as array".. bet.. ja: $node = $dom->childNodes->item(0)->childNodes->item(0)->getAttribute("label"); ..tad tam seko "Fatal error: Call to undefined method DOMText::getAttribute()"! Nekādi neizprotu kāpēc.. (varbūt man kas piemirsies).. Link to comment Share on other sites More sharing options...
v3rb0 Posted August 22, 2007 Report Share Posted August 22, 2007 tur takš rakstīts :) $dom->childNodes ir DOMNodeList instance; $dom->childNodes->item(0)->childNodes->item(0) ira DOMText instance, kurai nav tāda getAttribute() metode; ja netici php paziņojumiem, ta kaut vai ar get_class() pārbaudīt var. Link to comment Share on other sites More sharing options...
SadDemon Posted August 22, 2007 Author Report Share Posted August 22, 2007 ..tik tuvs ar dom un php kopumā vēl neesmu; Vai var palūgt kādu piemēru - kā tad man iegūt tos atribūtus? Link to comment Share on other sites More sharing options...
bubu Posted August 22, 2007 Report Share Posted August 22, 2007 Pag .. kāpēc tur ir DOMText? DOMText vai tad nav tad, kad, piemēram, xml fragmentā "<aa>bbb</aa>" bbb strings? Kas tev tādā gadījumā ir $dom? tb uz kurieni tas norāda. Gadījumā par dziļu neņem? A par to DOMText - vajag kādreiz manuāli uzšķirt: http://lv2.php.net/manual/en/ref.dom.php DOMText Extends DOMCharacterData. Tātad skatamies tai pat lapā DOMCharacterData klasi: DOMCharacterData->substringData() - Extracts a range of data from the node Par manuāļa lietošanu takš nav jāmaksā! Tā lietošana ir pilnīgi bez maksas. Link to comment Share on other sites More sharing options...
SadDemon Posted August 22, 2007 Author Report Share Posted August 22, 2007 (edited) <?php $xml_source = "tree_source.xml"; $dom = new DomDocument(); $dom->load($xml_source); $node = $dom->childNodes->item(0)->getAttribute("label"); echo $node; ?> ..*.xml: <node label = "---- galerijas"> <node label = "---- (galerija)"> <node label = "---- (kategorija)"> <node label = "----.jpg" /> <node label = "----.jpg" /> <node label = "----.jpg" /> </node> <node label = "---- (kategorija)"> <node label = "----.jpg" /> <node label = "----.jpg" /> <node label = "----.jpg" /> </node> ..iegūstam pirmā mezgla label, bet kā tālak? ..tur arī seko tie error. Edited August 22, 2007 by SadDemon Link to comment Share on other sites More sharing options...
SadDemon Posted August 23, 2007 Author Report Share Posted August 23, 2007 (edited) Pēc nervus bendējošiem mēģinājumiem, secinājums ir: # izmantojot getElementsByTagName(), visi pakārtotie mezgli nostājas vienā līmenī.. # tātad, ja rakstam - $node = $dom->getElementsByTagName("node")->item(3)->getAttribute("label"); ..iegūsim pirmo mezglu, kur label ir iekļauts "----.jpg".. u.t.t. Šajā gadījumā man tas nekādi neder.. Palūgšu piemēru (netieku skaidrs)! Kā iegūt 4. līmeņa node label? Edited August 23, 2007 by SadDemon Link to comment Share on other sites More sharing options...
SadDemon Posted August 23, 2007 Author Report Share Posted August 23, 2007 Vai tiešām neviens neizpalīdzēs? Link to comment Share on other sites More sharing options...
v3rb0 Posted August 23, 2007 Report Share Posted August 23, 2007 (edited) neesu skatījies tās dom f-jas, bet no tās infos kas tepat piemērā, var salikt to visu rekursijā un tiksi pie visiem labeļiem. function dump($node, $level=1) { if(isset($node -> childNodes) && get_class($node -> childNodes) == 'DOMNodeList') foreach($node -> childNodes as $childNode) { if(get_class($childNode) == 'DOMElement') printf ("level %d; label:%s\n",$level, $childNode -> getAttribute("label")); dump($childNode, $level+1); } else return; } $xml_source = "t.xml"; $dom = new DomDocument(); $dom->load($xml_source); dump($dom); edit: ar visiem leveļiem Edited August 23, 2007 by v3rb0 Link to comment Share on other sites More sharing options...
SadDemon Posted August 23, 2007 Author Report Share Posted August 23, 2007 Liels paldies v3rb0, uzreiz ir grūti sagremot šo visu, tomēr tas ir tas kas vajadzīgs.. Link to comment Share on other sites More sharing options...
v3rb0 Posted August 23, 2007 Report Share Posted August 23, 2007 ņemam pirmo koka elementu, padodam viņu kādai f-jai. f-ja paskatās vai padotajam ir chaildi, ja ir, tad ar katru čaildu izdara to pašu ko sākumā darījām ar pirmo koka elementu. Link to comment Share on other sites More sharing options...
Recommended Posts