Jump to content
php.lv forumi

XML uz MySql


_siikais_

Recommended Posts

Tā kā no XML es nezinu neko, un pēdējas divas naktis ir pagājušas neguļot un cīnoties atrast risinājumu, bet bez rezultātiem. Tad lūgšu izpalīdzēt...

XML struktuura

<list>
 <item id="1" name="recepte_kautkam">
<receptes id="1666" liimenis="1" />
<mainiigais_x />
<summa>30</summa>
<iznakums>100%</iznakums>
<produkts id="17" daudzums="500" />
<sastavdalja id="1864" daudzums="4" />
<sastavdalja id="1869" daudzums="2" />
 </item>
 <item id="2" name="recepte_kautkam2">
<receptes id="1786" liimenis="1" />
<mainiigais_y />
<summa>30</summa>
<iznakums>100%</iznakums>
<produkts id="3" daudzums="1" />
<sastavdalja id="2005" daudzums="1" />
<sastavdalja id="1869" daudzums="18" />
<sastavdalja id="1870" daudzums="18" />
 </item>
....
</list>

Sādus ierakstus vajag dabūt ieksh MySql Databaazes divām tabulām

CREATE TABLE IF NOT EXISTS `recepte` (
 `id` int(11) NOT NULL,	 -- te ierakstās <item id="1">
 `name` varchar(50) NOT NULL, -- te ierakstas <item name="recepte_kautkam">
 `receptesid` int(11) NOT NULL, -- te ierakstas <receptes id="1666">
 `recepteslvl` int(11) NOT NULL, -- te ierakstas <receptes liimenis="1" />
 `mainiigais` varchar(50) NOT NULL, -- te ierakstas <mainiigais_x /> vinjsh varbuut kaa dazhaads teksts
 `summa` int(11) NOT NULL, -- te ierakstas	 <summa>30</summa>
 `iznakums` varchar(50) NOT NULL, -- te ierakstas	 <iznakums>100%</iznakums>
 `produktaid` int(11) NOT NULL, -- te ierakstas	 <produkts id="3">
 `produktadaudzums` int(11) NOT NULL -- te ierakstas	  <produkts daudzums="1" />
) ENGINE=MyISAM DEFAULT CHARSET=latin1;

CREATE TABLE IF NOT EXISTS `sastavdaljas` (
 `id` int(11) NOT NULL,	 -- te ierakstās <item id="1">
 `sastavdaljasid` int(11) NOT NULL, -- te ierakstas	 <sastavdalja id="2005" >
 `sastavdaljasdaudzums` int(11) NOT NULL -- te ierakstas	  <sastavdalja daudzums="1" />
) ENGINE=MyISAM DEFAULT CHARSET=latin1;

 

Šajās tabulās saistītie lauki ir id...

Cik esmu lūkojies pamācībās, tad secinājums ir radies, ka nebūt nav šis no vieglākajiem uzdevumiem.

Link to comment
Share on other sites

Lieto SimpleXML, tad uzdevums būs gan no vieglākajiem:

 

$xml = simplexml_load_file("fails.xml");
foreach ($xml->item as $item)
{
$id = $item["id"];
$receptesid = $item->receptes["id"];
$recepteslvl = $item->receptes["liimenis"];
$summa = $item->summa;
$iznakums = $item->iznakums;
$produktaid = $item->produkts["id"];
$produktadaudzums = $item->produkts["daudzums"];
$mainiigais = "";
foreach ($item->children() as $k=>$v)
{
	if (strpos($k, "mainiigais") === 0)
	{
		$mainiigais = substr($k, strlen("mainiigais"));
	}
	else if ($k == "sastavdalja")
	{
		$sastavdaljasid = $v["id"];
		$sastavdaljasdaudzums = $v["daudzums"];
		mysql_query("INSERT INTO sastavdaljas VALUES ($id, sastavdaljasid, $astavdaljasdaudzums)");
	}
}
mysql_insert("INSERT INTO recepte VALUES (... te saliec visas vajadzīgās vērtības ...)");
}

(rakstīju bez nekādas reālas koda pārbaudes, pielabo kļūdas pats)

Link to comment
Share on other sites

bubu paldies tev, visaa visumaa skripts stradaa, vieniigi paaris siikumi

		else if ($k == "sastavdalja")
	{
		$sastavdaljasid = $v["id"];
		$sastavdaljasdaudzums = $v["daudzums"];
		mysql_query("INSERT INTO sastavdaljas VALUES ($id, sastavdaljasid, $astavdaljasdaudzums)");
	}

shii dalja panjem tikai vienu sastaavdalju un taalaak neko neizvada, kaut gan sastavdaljas ir vairakas.

kaa arii

		if (strpos($k, "mainiigais") === 0)
	{
		$mainiigais = substr($k, strlen("mainiigais"));
	}

iznjemeu aaraa, jo tajaa vietaa kur noraada mainiigais var buut dajebkas piemeeram <suns/> vai <kakjis/> vai <pele/>. tur nau konstants mainiigais...

Link to comment
Share on other sites

shii dalja panjem tikai vienu sastaavdalju un taalaak neko neizvada, kaut gan sastavdaljas ir vairakas.

Kā vienu? Tas tak ir ciklā, uz katru pa vienu reizi izpildīsi to if zaru.

 

iznjemeu aaraa, jo tajaa vietaa kur noraada mainiigais var buut dajebkas piemeeram <suns/> vai <kakjis/> vai <pele/>. tur nau konstants mainiigais...

Ah, nu tad salīdzini $k uz visiem zinājiem citiem tagu vārdiem (summa, receptes, iznakums, ...) un, ja tas nav to starpā, tikai tad izpildi to piešķiršanu.

Link to comment
Share on other sites

nu es testeeju visiem ar echo nevis uzreiz pa tieshu insert ieksh db, un vinjsh tikai vienu receptes sastaavdalju izvada... kautgan sastaavdaljas ir 2

	<sastavdalja id="1864" daudzums="4" />
<sastavdalja id="1869" daudzums="2" />

 

 

ups par maz miega...

:) nepareizu mainiigo sastaavdaljai iedevu...

Edited by _siikais_
Link to comment
Share on other sites

×
×
  • Create New...