Jump to content
php.lv forumi

Citiem viegli.. citiem nee..


SadDemon

Recommended Posts

  • Replies 81
  • Created
  • Last Reply

Top Posters In This Topic

Ir jautājums - kā lai no *.xml faila nolasa datus augošā sēcībā.. ja *.xml failā dati ir haosā.. piemēram..

 

*.xml saturs:

 

<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<Noliktava produkcijai="----">
<product id="4" amount="27" name="vizītkaršu etvija" color="metāls" article="1602270" category="birojam" status="ir"/>
<product id="1" amount="51" name="basketbola bumba" color="oranža" article="-" category="citi" status="ir"/>
<product id="5" amount="3" name="vizītkaršu etvija" color="metāls" article="54756889" category="birojam" status="ir"/>
<product id="20" amount="125" name="kalkulators" color="melna" article="melco" category="birojam" status="ir"/>
<product id="25" amount="72" name="krūze" color="zila" article="-" category="krūzes" status="ir"/>
</Noliktava>

 

..tikai cenšos iemācīties php.. palīdziet.. (skripts jau pavisam garām, citādi nemācēju, tāpēc jau jautāju pēc palīdzības)

 

un *.php saturs:

 

<?php

$id = 1;
$count = 500;

$doc = new DOMDocument;
$doc -> load('../xml/depot.xml');

while ($id <= $count) {
$product = $doc->getElementsByTagName('product') -> item($id++);

$attributeNode = $product->getAttributeNode('id');

echo $attributeNode->value."\n";
}

?>

 

..outputs šim ir 1 5 20 25;

..bet kur pazūd elements ar id attribūtu "4", kas ir pirmajā rindiņā?

 

..lūdzu pamāciet, palīdziet!!!

Edited by SadDemon
Link to comment
Share on other sites

..un tomēr lūgšu palīdzēt - kā varētu dabūt produktu "id" augošā secībā.. itkā lai meklē produktu ar "id - 1", ja atrod, tad

echo "Ir";

.. ja neatrod, tad "$i++", tobiš - atgriezjas funkcijas augšgalā un meklē produktu ar "id - 2".. u.t.t.

 

Doma ir gala rezultāta dabūt *.php, kas pārkārtotu produktus (meklētu pa vienam, ja atrastu.. ierakstītu citā *.xml failā, tādā veidā veidotos augoša secība; kad funkcija izsīkusi, pārkopētu sakārtoto *.xml failu pa virsu oriģinālam un iztukšotu sevi)..

 

 

Tākā manas php zināšanas ir ļoti aprobežotas, iespējams stipri kļūdos.. tad vēlētos uzzināt kādu metodi, kā sakārtot *.xml failu..

Edited by SadDemon
Link to comment
Share on other sites

Tajā masīvā nevis drukā ārā elementus, bet liec xml nodes asociatīvajā masīvā, kā atsēgu liekot $id:

$mas = array();

...

ciklā: $mas[$id] = $node;

 

Pēc tam, kad cikls būs pabeidzies, sakārot masīvu (ksort) un tad drukā ārā visu pēc kārtas no masīva.

Link to comment
Share on other sites

..nesapratu par to "asociatīvo masīvu".. varētu lūdzu paskaidrot sīkāk vai kādu piemēru, kā "attributeNode -> value" dabūt iekš array(); vai kā?

 

Esmu pavisam apjucis un samurgojis k-ko galīgi garām, bet nu dabūnu ārā "id"..

 

*.php saturs:

 

<?php

$doc = new DOMDocument;
$doc -> load('../xml/depot.xml');

$count = 0;

for ($i = 0; $i <= 500; $i++) {
$el = $doc -> getElementsByTagName('product');
foreach($el as $element) {
	if($element -> getAttribute('id') == $i) {
		$attributeNode = $el -> item($count++) -> getAttributeNode('id');
		echo $attributeNode -> value."\n";
		break;
	}
}
}

?>

 

iepriekš paldies..

Edited by SadDemon
Link to comment
Share on other sites

..nesapratu par to "asociatīvo masīvu".. varētu lūdzu paskaidrot sīkāk vai kādu piemēru, kā "attributeNode -> value" dabūt iekš array(); vai kā?

 

Es jau piemēru parādīju:

ciklā: $mas[$id] = $node;
Link to comment
Share on other sites

Saprotu jau, ka Tev tas šķiet pietiekami izsmeļoši.. bet tomēr tādam muļķim kā es tas vēl neko neizsaka..

 

Kā jau visu laiku atkārtoju.. cenšos iemācīties php, bet ne viss padodas tik vienkārši (diemžēl)..

 

Paldies tik un tā..

 

(ceru arī uz izsmeļošāku paraugu)

Link to comment
Share on other sites

$mas = array();

// ej cauri ar for/while/whatever kā savam xml'am un savāc nodes masīvā
for (...) 
{
$id = ...;
$node = ...;
$mas[$id] = $node;
}

// tagad viss ir sabāzts masīvā, vajag sakārtot to ar ksort
ksort(...);

// tagad masīvs ir sakārtots, izvadi visus elementus no masīva pēc kārtas
for (...)
{
echo ...;
}

 

Un tagad vēlreiz paskaties uz manu to iepriekšējo postu. Vai tur nav tas pats uzrakstīts, tikai cilvēkam izlasāmā valodā?

Link to comment
Share on other sites

..lūdzu pālīdziet, pielabojiet skriptu..

 

*.xml saturs:

 

<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<Noliktava produkcijai="----">
<product id="4" amount="27" name="vizītkaršu etvija" color="metāls" article="1602270" category="birojam" status="ir"/>
<product id="1" amount="51" name="basketbola bumba" color="oranža" article="-" category="citi" status="ir"/>
<product id="5" amount="3" name="vizītkaršu etvija" color="metāls" article="54756889" category="birojam" status="ir"/>
<product id="20" amount="125" name="kalkulators" color="melna" article="melco" category="birojam" status="ir"/>
<product id="25" amount="72" name="krūze" color="zila" article="-" category="krūzes" status="ir"/>
</Noliktava>

 

*.php, kas nedarbijas:

 

<?php

$doc = new DOMDocument;
$doc -> load('../xml/depot.xml');

$mass = array();

$length = $doc -> getElementsByTagName('product');

for ($i = 0; $i < $length -> length; $i++) {
$product = $doc -> getElementsByTagName('product') -> item($i);
$attributeNode = $product->getAttributeNode('id');

$id = $attributeNode;
$node = $product;
$mass['$id'] = $node;
}

ksort($mass);

foreach ($mass['$id'] as $output) {
echo $output."<br>";
}

?>

Link to comment
Share on other sites


×
×
  • Create New...