SadDemon Posted June 13, 2007 Report Share Posted June 13, 2007 (edited) Xml faila struktūra: Noliktava produkcijai="----"> <product id="1" amount="51" name="basketbola bumba" color="oranža" article="-" category="citi" status="ir" /> <product id="2" amount="7" name="vizītkaršu etvija" color="metāls" article="50042" category="birojam" status="ir" /> <product id="3" amount="25" name="vizītkaršu etvija" color="metāls" article="ap802301" category="birojam" status="ir" /> <product id="4" amount="27" name="vizītkaršu etvija" color="metāls" article="1602270" category="birojam" status="ir" /> </Noliktava> Ļoti nepieciešams *.php skripts, kas nodzēstu konkrētu produktu.. vadoties pēc "id" atribūta.. ..tik tiko esmu php iesācējs.. lai zinošāki cilvēki pielabo; *.php saturs ir: <?php $id = $_POST['id']; $doc = new DOMDocument; $doc->load('../xml/depot.xml'); $Noliktava = $doc->documentElement; $product = $Noliktava->getElementById($id); $oldproduct = $Noliktava->removeChild($product); echo $doc->saveXML(); ?> ..bet nu nekādi nedarbojas.. lūdzu palīdziet! Jau ieprieksh pateicos.. Edited June 14, 2007 by SadDemon Link to comment Share on other sites More sharing options...
bubu Posted June 13, 2007 Report Share Posted June 13, 2007 removeChild jāizsauc parent nodei, nevis augšējam XML elementam. $product->parentNode->removeChild($product); P.S. Būtu arī jauki, ja kodu liktu bbtagos. Tad ir vieglāk lasīt. Link to comment Share on other sites More sharing options...
SadDemon Posted June 14, 2007 Author Report Share Posted June 14, 2007 (edited) ..njā, bet tik un tā nedarbojas.. vai iespējams, ka getElementById ir kļūdaini izpildīts.. vajadzētu, lai sameklē produktu pēc postētā id no flash, kas *.xml failaa ir "product" atribūts.. ..ļoti vajadzīga palīdzība! Edited June 14, 2007 by SadDemon Link to comment Share on other sites More sharing options...
GedroX Posted June 14, 2007 Report Share Posted June 14, 2007 (edited) Neesmu ar DOM strādājis, bet 5min izlasīju dokumentāciju un: 1) Nevis id="...", bet gan xml:id="..." 2) Id nevar sākties ar ciparu 3) getElementById jāizsauc dokumentam nevis Noliktava elementam 4) Un vēl iepriekšminētais $product->parentNode->removeChild($product) Un vēl 5) Kas tas par nosaukumu topikam? 6) Ieslēdz, lai kļūdas PHP izvada. Vismaz man jau pie getElementById izleca. 7) Iemācies lasīt php.net dokumentāciju. 8) XML failam ir nodefinēts enconding-s? Edited June 14, 2007 by GedroX Link to comment Share on other sites More sharing options...
SadDemon Posted June 14, 2007 Author Report Share Posted June 14, 2007 Paldies par ievirzīšanu sliedēs.. lieta tik viena - laiks iet un tāpēc tā steidzos un lūdzu.. *.xml encoding ir.. un jautājums - kāpēc "id" nevar sākties ar ciparu? (šajā gadījuma tas arī tiek izmantots iekš flash datagrid komponentā kā cipars) Link to comment Share on other sites More sharing options...
GedroX Posted June 14, 2007 Report Share Posted June 14, 2007 (edited) Kāpēc xHTML elementiem id nevar sākties ar ciparu? Kāpēc mainīgie nevar sākties ar ciparu? Grūti pateikt. Tā pieņemts. Laikam no laika gala, kad programmēšanas valodām bija jāatšķir skaitļi no mainīgajiem. Vismaz underscore pieliec priekšā, kaut arī tas nav priekš id ieteicams. Edited June 14, 2007 by GedroX Link to comment Share on other sites More sharing options...
SadDemon Posted June 14, 2007 Author Report Share Posted June 14, 2007 Principā jau der jebkāda metode, kuras rezultātā tiktu nodzēsta konkrētā rindiņa *.xml failā.. nez' *.php k-kāds search and replace.. Piemēram, kā šeit.. ja tā ir iespējams.. Link to comment Share on other sites More sharing options...
v3rb0 Posted June 14, 2007 Report Share Posted June 14, 2007 (edited) $id = 3; $doc = new DOMDocument; $doc->load('t.xml'); $el = $doc -> getElementsByTagName('product'); foreach($el as $element) { if($element -> getAttribute('id') == $id) { $element -> parentNode -> removeChild($element); break; } } echo '<pre>'.htmlentities($doc->saveXML()).'</pre>'; ne tuvu eleganti, bet vismaz meklē un dzēš nost pēc cipariska id ar DOM f-jām p.s. arī ar šitām f-jām neesu strādājis Edited June 14, 2007 by v3rb0 Link to comment Share on other sites More sharing options...
SadDemon Posted June 14, 2007 Author Report Share Posted June 14, 2007 (edited) Liels, liels paldies v3rb0 .. tagad viss darbojas, kā vēlējos.. tikai viens - paliek tukša līnija, kā no tā atbrīvoties? Vēlreiz paldies! Edited June 14, 2007 by SadDemon Link to comment Share on other sites More sharing options...
GedroX Posted June 14, 2007 Report Share Posted June 14, 2007 (edited) Tev xml sākumā tiešām ir nodefinēts, kādā encoding-ā viņš ir? Aptuveni šādi: <?xml version="1.0" encoding="UTF-8"?> Saglabāšanai izmanto fopen(), fwrite() funkcijas. Tikai php jābūt tiesībām rakstīt tajā failā. Un noteikti pārbaudi, vai saveXML neatgriež false (ja nu tas mēdz..). Par tukšu līniju. http://programming-oneliners.blogspot.com/...nes-php-29.html Starp citu pirmais links meklējot googlā. :/ Edited June 14, 2007 by GedroX Link to comment Share on other sites More sharing options...
SadDemon Posted June 14, 2007 Author Report Share Posted June 14, 2007 Paldies! Viss kārtībā.. *.php tagad izskatās šādi: <?php $id = $_POST['id']; $doc = new DOMDocument; $doc -> load('depot.xml'); $el = $doc -> getElementsByTagName('product'); foreach($el as $element) { if($element -> getAttribute('id') == $id) { $element -> parentNode -> removeChild($element); break; } } $doc -> save("depot.xml"); ?> Par tukšu līniju pamēģināšu vēl.. paldies! (izglābi) Link to comment Share on other sites More sharing options...
SadDemon Posted June 14, 2007 Author Report Share Posted June 14, 2007 (edited) Milzīgs paldies! The Devil is definitely in the details.. Edited June 14, 2007 by SadDemon Link to comment Share on other sites More sharing options...
bubu Posted June 14, 2007 Report Share Posted June 14, 2007 Vai tad xmlā ir svarīgas tukšās līnijas (un cits whitespeiss)? Link to comment Share on other sites More sharing options...
SadDemon Posted June 14, 2007 Author Report Share Posted June 14, 2007 (edited) ..tākā neesmu necik ļoti zinošs šajās lietās, atbildēshu - nezinu.. bija nepieciešams tikai, lai smuki saglabātu *.xml struktūru.. jo failā ikdienas tiks dzēsta un labota informācija.. un gadījumā, ja kādu reizi jālien tur skatīties - nebūtu milzums tukšuma, bet lai ir pārskatāmi.. Ir vēl jautājums - vai šī darbība, dzēšot datus - varētu nedarboties uz vecākas php vai msql bāzes.. jo testējot localhostā, kur man jaunākās mysql un php versijas - viss darbojas, bet augšuplādēts uz awardspace.com, kur ir ceturtās versijas - nedarbojas.. Vai uz php 5.0.4 ir Dom dokumenta funkcijas, ja kāds zin.. uz tāda tiks hostota lapa.. ak' es muļķis, tik tālu nebiju aizdomājies.. Edited June 14, 2007 by SadDemon Link to comment Share on other sites More sharing options...
andrisp Posted June 14, 2007 Report Share Posted June 14, 2007 No php.net/dom: For PHP 4, use DOM XML (http://lv.php.net/manual/en/ref.domxml.php). Link to comment Share on other sites More sharing options...
Recommended Posts