SadDemon
Reģistrētie lietotāji-
Posts
52 -
Joined
-
Last visited
Profile Information
-
Location
Rīga
SadDemon's Achievements
Newbie (1/14)
-
saistībā ar šo visu, tika atrasts: $dom->preserveWhiteSpace = false; // izņemam tukšumus pirms ielādes.. parsēšanas $dom->formatOutput = true; // pie saglabāšanas, dati ir smuki sakārtoti
-
jā, bet ja mērķis ir to visu informāciju pārrakstīt citā (jaunā) failā.. tikai sakārtotu.. vai tā vispār ir pieņemama lieta; vai tas būtu pavisam nepareizi.. nerunājot par to vai tam ir liela/maza nozīme..
-
Par rekursīvo funkciju sapratu, bet ..lieta, kas neizdodas ir: samazināt atkāpi, jo ar Dom ejot caur nodēm, aizvēršanas tagu tas nemaz neskaita..
-
Lūdzu mazu piemēru, citādi nekādi neizdodas (pietrūkst zināšanu)..
-
Ir nepieciešamība pēc kādas funkcijas, kas no: <node><node>text</node><node>text</node></node> galā iegūtu: <node> <node>text</node> <node>text</node> </node> ..paldies!
-
Nu iespējams pagaidām esmu kaut nedauds virzījies uz priekšu.. Tākā iepriekšējais label man ir pieejams iekš Flash, tad ir iespēja salīdzināt un pārrakstīt.. *.php: <?php function domToArray($node, $level = 0) { $array = array(); // if node has attributes if ($node->hasAttributes()) { $attributes = $node->attributes; if (!is_null($attributes)) { foreach ($attributes as $attribute) { $array[$attribute->name] = $attribute->value; echo "[".$level."]\n".$array[$attribute->name]."<br>"; // if nodes attribute equals value, update attribute if ($array[$attribute->name] == "----.jpg") { $node->setAttribute("label", $array[$attribute->name]." [testējam]"); // save global $dom; global $xml_source; $dom->save($xml_source); } } } } // if node has childnodes if ($node->hasChildNodes()) { $child = $node->childNodes; for ($i = 0; $i < $child->length; $i++) { $iChild = $child->item($i); $array[$iChild->nodeName] = domToArray($iChild, $level+1); } } } $xml_source = "tree_source.xml"; $dom = new DomDocument(); $dom->load($xml_source); domToArray($dom); ?>
-
Izskaidrošu visu smalkāk: Gala produkts ir administrēšana galerijai iekš Flash.. kur ir tree komponents, kas saņem datus no *.xml: <node label="---- galerijas"> <node label="---- (galerija)"> <node label="---- (kategorija)"> <node label="--.jpg"/> </node> <node label="---- (kategorija)"> <node label="----.jpg"/> <node label="----.jpg"/> <node label="----.jpg"/> </node> </node> </node> ..un datus par attēliem saņem no attiecīga *.xml: <gallery title="----" thumbDir="-----" imageDir="----" random="false"> <category name="----"> <image> <date>----</date> <title>----</title> <desc>----</desc> <thumb>----.jpg</thumb> <img>----.jpg</img> </image> </category> </gallery> Mainot informāciju, ar *.php nomainam konkrētās nodes label atribūtu pirmajā *.xml un informāciju otrajā *.xml.. Te arī tā problēma, kad cenšos pirmajā *.xml failā piekļūt nodēm, ņemot galerijas nodes indexu.. galerijas nodes indexu un attēla nodes indexu..
-
..principā nepareizi izteicos, mērķis ir mainīt konkrētam mezglam label atribūtu.. un zinu tikai katras parentNodes un childNodes indeksu..
-
Balstoties uz v3rb0 iepriekš nopostēto skriptu, mazliet izpratu funkcijas principus un izveidoju līdzīgu funkciju, kas visu iekļauj iekš array().. tas manai acij draudzīgāks izskatās.. *.php <?php function domToArray($node, $level = 0) { $array = array(); // if node has attributes if ($node->hasAttributes()) { $attributes = $node->attributes; if (!is_null($attributes)) { foreach ($attributes as $attribute) { $array[$attribute->name] = $attribute->value; echo "[".$level."]\n".$array[$attribute->name]."<br>"; } } } // if node has childnodes if ($node->hasChildNodes()) { $child = $node->childNodes; for ($i = 0; $i < $child->length; $i++) { $iChild = $child->item($i); $array[$iChild->nodeName] = domToArray($iChild, $level+1); } } } $xml_source = "tree_source.xml"; $dom = new DomDocument(); $dom->load($xml_source); domToArray($dom); ?> Jautājums ir - kā lai piekļūst kādam konkrētam mezglam?
-
un kā iegūt kādu konkrētu labeli 4. līmenī zinot viņa indexu parentChild'ā?
-
Liels paldies v3rb0, uzreiz ir grūti sagremot šo visu, tomēr tas ir tas kas vajadzīgs..
-
Vai tiešām neviens neizpalīdzēs?
-
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?
-
<?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.
-
..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?